1. 直接调用
Integer.bitCount(x)
可以统计x
用二进制表示时1
的个数
2. 位运算
public int hammingWeight(int n) {
int count = 0;
while (n != 0) {
n &= n - 1;
count++;
}
return count;
}
- 原理分析
@小ke
- 每个二进制的数,都是以
0
或者1
结尾的 - 对于以
1
结尾的数n
n-1
则是以0
结尾- 并且
n
和n-1
只是最后一位不同而已 - 两者按位与的结果是
n-1
- 例如
01110
与01101
,两个数最后一位不同
- 对于以
0
结尾的数n
n-1
则是以1
结尾,并且n
和n-1
有多个数位不同- 即
n
对应的二进制的最右边一个1
所在那一位和最后一位之间的多个数位与n-1
不同 - 例如
0111000
与0110111
,4
个数位不同
- 所以两种情况下,
n & n-1
的结果都是将n
的最后一个1
消掉
- 每个二进制的数,都是以