题目描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
示例1
输入
10
返回值
2
补码:源码取反+1
class Solution {
public:
int NumberOf1(int n) {
int sum=0,tip=32;
if(n>=0)
{
while(tip--)
{
if(n&1) sum++;
n>>=1;
}
}
else
{
int tmp=1,t;n*=-1;
while(tip--)
{
t=(n&1)^1;//个位取反
if(tmp^t) sum++;
tmp&=t;//进位
n>>=1;
}
}
return sum;
}
};