题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解答
class Solution {
public:
int NumberOf1(int n) {
int count=0;
unsigned int flag=1;
while(flag)
{
if(n & flag)
++count;
flag=flag<<1;
}
return count;
}
};
说明
这里用按位与的方法来做。一个整数可以直接按为与运算,就是在用其二进制的形式来进行。
这里flag初始化为1,和最右边一位按位与,如果原数字中也是1,那么统计数字加1。
另外,如果这个整数是32位的,那么循环一共要进行32次。如果这个整数是64位的,那么一共循环64次。因为向左移动一位,右边补0,需要让1完全移出flag才会是0,才终止循环。