输入一个32位整数,输出该数二进制表示中1的个数。
注意:
负数在计算机中用其绝对值的补码来表示。
思路:这里有个难点是如何处理负数。
在C++中如果我们右移一个负整数,系统会自动在最高位补1,这样会导致 nn 永远不为0,就死循环了。
解决办法是把 nn 强制转化成无符号整型,这样 nn 的二进制表示不会发生改变,但在右移时系统会自动在最高位补0。
代码:
class Solution {
public:
int NumberOf1(int n) {
unsigned int un=n;
int ans=0;
for(;un;un>>=1)
if(un&1)
ans++;
return ans;
}
};