题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
容易出错的解法:(输入负数向右移位的话左边会补1)
class Solution {
public:
int NumberOf1(int n) {
unsigned int ln = (unsigned int)n;
int num = 0;
while(ln > 0)
{
num += n&1;
ln = ln >> 1;
}
return num;
}
};
正确解法:
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
while(n)
{
//把n中最右边的1变成0
n = n & (n-1);
count++;
}
return count;
}
};