题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解法
n个1循环n次; 对于二进制数来说,每次-1都会将最右边的1变为0,而1后面如果还有0的话,将会全部变为1;而如果最右边的1是最后一位,那么就这一位变为0; 如101001 -1 =>101000; 10100 -1 => 10011; 然后再和n自己与,如10100 & 10011 =》 10000 这样就去掉了最右边的一位1;从而可以将循环次数缩小为1的个数;
## 代码
class Solution {
public:
int NumberOf1(int n) {
int cout = 0 ;
while(n){
cout++;
n = (n-1)&n;
}
return cout;
}
};