方法1:除2取余法,主要缺点是只能计算正整数,对于负数不能计算(若输入一个负数,答案为0)。具体代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int count_one_bits(int value);
int v;
printf("请输入一个整数:");
scanf("%d", &v);
count_one_bits(v);
system("pause");
return 0;
}
int count_one_bits(int value)
{
int count = 0;
int val = value;
while (value != 0)
{
if (value % 2 == 1)
count++;
value = value / 2;
}
printf("\n%d的二进制中1的个数为%d\n", val, count);
return count;
}
方法2:移位法,移位法有“右移”和“左移”,右移时负数补1、正数补0,而左移时正负数均补0.本代码程序中采用“右移法”。移位法的缺点是效率低下,比如对于-1而言,需要移位32次才能得到正确答案。具体代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int count_one_bits(int value);
int v;
printf("请输入一个整数:");
scanf("%d", &v);