由于这个数有可能是负数,负数在计算机中以补码的方式存储,要求负数的补码中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;
}