最直观的方法是把一个数的二进制,一个一个的计数。但是二进制数有巧算,代码如下:
int count(int n) {
int cnt = 0;
while (n != 0) {
cnt++;
n = n & (n - 1);
}
return cnt;
}
其依据是n & (n -1),能已消除最右边的1。
这个方法有两点需要注意:
- 当n < 0时,这个方法同样适用。比如-1有32个1
- 判断一个数是不是2^n,可以测试n & (n -1 ) == 0
网友评论