1.题目说明
输入一个 32 位整数,输出该数二进制表示中 1 的个数。
注意:负数在计算机中用其绝对值的补码来表示。
2.输入输出样例
输入:9
输出:2
解释:9的二进制表示是1001,一共有2个1。
3.思路
1.求出每一位的值。在位运算中我们求n的第k位用:n >> k & 1
2.求出最低位的1,并且不断更新迭代:n -= n & -n
4.C++代码
class Solution {
public:
int NumberOf1(int n) {
//做法一:求出每一位的数即可 n >> i & 1
int res = 0;
for(int i = 0;i<32;i++){
if(n >>i & 1) res++;
}
//做法二:求最低位的1即最后一位1,n & -n
while(n) {
n -= n & -n;
res++;
}
return res;
}
};