输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
如果直接把该数 依次右移 & 1 ,当该数为负数时,会出现死循环的情况。
可以把 1 依次左移, 移动 的次数 为 int 型的位数。
另一种解法:
将 数 更新为 n = n&(n-1)
那么相当于 减去了 数n 最右边的 1。
class Solution {
public:
int NumberOf1(int n) {
int cnt = 0;
while(n)
{
cnt++;
n = (n-1)&n;
}
return cnt;
}
};