题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路1(移位)
- 求 1111001中1的个数
- 统计个数的变量为count
n = 1111001 - 循环:
- 如果n & 1 != 0 则count++;
- n >>= 1;
1111001
- 第一次循环结果:
- count++
- n = 111100
- 第二次循环结果
- n = 11110
- …
思路1(也是移位)
- 同样是1111001
- 如果n != 0:表示一定有1的存在 则count++
- 然后n 和n - 1作 &运算
- 循环
- 第一次:count++ , n = 1111000
- 第二次: count++ ,n = 1111000 & 1110111 = 1110000
- …
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
while(n){
count++;
n = (n-1) & n;
}
return count;
}
};