//C语言:求一个整数在内存中储存1的个数(补码中的1的个数)
#include<stdio.h>
int main()
{
int num = 32;
int count = 0;
while (num)
{
if (num % 2 == 1)
{
count++;
}
num = num / 2;
}
printf("%d\n", count);
return 0;
}
- 缺点:对于负数无法正确统计
- 如下:
-
改进:
//改进使用32位每个未与1相与并依次移位的方式。
#include <stdio.h>
int main()
{
int num = 5;//0000101
int count = 0;
int i;//用于移位的位数,注意最多移动31次
for(i = 0; i <32;i++)
{
if (((num >> i)& 1) == 1)
{
count++;
}
}
printf("%d\n", count);
return 0;
}