题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路1:为了避免负数出现死循环,我们将1不断左移,用来判断 n 的某一位是否为1;
class Solution {
public:
int NumberOf1(int n) {
int flag = 1;
int count = 0;
while(flag){
if(flag & n)
++count;
flag <<= 1;
}
return count;
}
};
思路2:将 n 减去1,和原来的 n 相与,会将最右边的 1 变成 0
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
while(n){
++count;
n &= n-1;
}
return count;
}
};