由于这个数有可能是负数,负数在计算机中以补码的方式存储,要求负数的补码中1的个数依然可以正确输出,方法如下:

1、定义这个数的变量类型为无符号整型(unsigned int)

代码为

include<stdio.h>
int count_one_bits(unsigned value)
{
int count=0;
while(value)
{
   if(value%2==1)
   {count++;
   }
   value=value/2;
 }
return count;
}
int main()
{
unsigned int value;
int count;
scanf("%d",&value);
count=count_one_bits(value);
printf("count=%d\n",count);
return 0;
}

 2、定义为整型变量用“按位与”(&)的和“右移”(>>)实现。

#include<stdio.h>
int count_one_bits(int value)
{
int count=0;
int i=32;
while(i)
{
if(value&1==1)     
{                  
count++;
}
value=value>>1;
i--;
}
return count;
}
int main()
{
int value;
int count=0;
scanf("%d",&value);
count=count_one_bits(value);
printf("count=%d\n",count);
return 0;
}
3、继续优化

int count_one_bits(int value)
{
int count=0;
while(value)
{
count++;
value=value&(value-1);           
}
return count;
}
int main()
{
int value;
int count=0;
scanf("%d",&value);
count=count_one_bits(value);
printf("count=%d\n",count);
return 0;
}