题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
//count_1为计算正数或者0用二进制表示时1的个数
int count_1(int n)
{
int count=0;
while(n!=0)
{
if(n%2==1)count++;
n/=2;
}
return count;
}
//正数或者0直接调用count_1,负数,以1010 1110为例,则需要把负数转化为
//0010 1110调用count_1计算1的个数,再加符号位的1即可,用1010 1110和
//0111 1111按位与即可。
int NumberOf1(int n) {
if(n>=0)
{
return count_1(n);
}
else
{
int x=1;
int i=0;
while(i<sizeof(int)*8-2)
{
x=(x<<1)+1;
++i;
}
n=n&x;
return count_1(n)+1;
}
}