位运算
n的二进制表示中第k位是0还是1
1.先把第k位移到最后一位
2.看个位
n >> k & 1
//输出10的每一位
int n = 10;
for(int k = 3; k >= 0; k --) {
cout << (n >> k & 1);
}
lowbit(x),得到x的最后一位1
//x = 1010 lowbit(x) = 10
//x = 10011000 lowbit(x) = 1000
//~x表示取反x
//在c++中,-x = ~x + 1
//所以x & -x = x & (~x + 1)
//设个x模拟一遍即可
int lowbit(int x) {
return x & -x;
}
应用:统计x里1的个数
//第k位
for(int i = 0; i < n; i ++) {
int res = 0;
cin >> A[i];
while(A[i]) {
if(A[i] & 1) {
res ++;
}
A[i] = A[i] >> 1;
}
cout << res << " ";
}
//lowbit
for(int i = 0; i < n; i ++) {
cin >> A[i];
int res = 0;
while(A[i]) {
A[i] -= lowbit(A[i]);
res ++;
}
cout << res << " ";
}
浙公网安备 33010602011771号