题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
方法一:掩码
class Solution {
public:
int NumberOf1(int n) {
int cnt = 0;
unsigned int flag = 1;
while(flag)//强行循环32次至flag=0时终止
{
if(n & flag)
cnt++;
flag = flag << 1;
}
return cnt;
}
};
方法二:逐步统计最右端的1
class Solution {
public:
int NumberOf1(int n) {
int cnt = 0;
while(n)
{
cnt++;
n = n & (n-1);
}
return cnt;
}
};