题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路1:不移动数字n。把n和1做与运算,判断n的最后一位是不是1。 然后把1左移一位得到2,再和n做与运算,判断n的右边第二位是不是1,通过不断的左移1,就可以判断n的每一位是不是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;
}
};
思路2:一个整数减去1,再和原整数做与运算,会把该整数最右边的1变成0。
class Solution {
public:
int NumberOf1(int n) {
int count=0;
while(n){
count++;
n=(n-1)&n;
}
return count;
}
};