剑指Offer第11题:二进制中1的个数

题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

解题思路:对于一个二进制数减1,该数最右边的1变为0,最右边的1的右边若存在0,则变为1,例如:1110111000 - 1 = 1110110111。因此,一个数n与n-1做按位与运算,就能消去一个二进制1,循环直至n==0,即可得出n的二进制中1的个数。

代码:

1
2
3
4
5
6
7
8
int  NumberOf1(int n) {
int count = 0;
while (n != 0) {
n &= (n-1);
count += 1;
}
return count;
}