&= 计算
8的二进制为 1000
12的二进制为 1100
那么
int x = 12;
x &= 8;
printf(x);
两个相乘之后会得到8。
x&=x-1
leetcode里的问题 338.比特位计数
class Solution {
public int[] countBits(int num) {
int[] bits = new int[num + 1];
for (int i = 0; i <= num; i++) {
bits[i] = countOnes(i);
}
return bits;
}
public int countOnes(int x) {
int ones = 0;
while (x > 0) {
x &= (x - 1);
ones++;
}
return ones;
}
}
题意是要计算各位的1的数量,那么 以8为例
1000 则只有第一位为1,
8 & 7 ===>>>1000 & 0111;得0。one++;
如果是7呢?
0111(7) & 0110(6) = 0110 >0; ones++
0110(6) & 0101(5) = 0100>0; ones++
0100 & 0011 = 0; ones++
可以看到x &= x-1,会把最后位的1给删去
从0111—>0110—>0100。因此就可以通过这个来计算7的二进制中,有多少个0。