代码1:
#include <stdio.h>
int main()
{int num = 10;
int count = 0;
while (num)
{
if (num % 2 == 1)
count++;
num /= 2;
}
printf("count = %d\n", count);
system("pause");
return 0;
}
为负数时不能用
代码2:
#include <stdio.h>
int main()
{int num = -1;
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
if (((num >> i) & 1) == 1)
count++;
}
printf("count=%d\n", count);
system("pause");
return 0;
}
效率较低,任何一个数都要循环32次。
代码3:
#include <stdio.h>
int main()
{
int num = -1;
int count = 0;
int i = 0;
while (num)
{
num = num & (num - 1);
count++;
}
printf("count = %d\n", count);
system("pause");
return 0;
}
代码4:写成函数的形式,并且可以判断任意数(不超过整型范围)。
#include <stdio.h>
int count_one_bit(int num)
{
int count = 0;
while (num)
{
num = num & (num - 1);
count++;
}
return count;
}
int main()
{
int num =0;
int ret = 0;
printf("请输入一个数:");
scanf("%d", &num);
ret = count_one_bit(num);
printf("%d\n", ret);
system("pause");
return 0;
}