题目
- 统计一个整数对应的二进制数的1的个数。输入一个整数(可正可负),输出该整数的二进制数中包含1的个数,按组合键Ctrl+Z结束。
思路分析
- 正数在内存中存储的是原码,负数在内存中存储的是补码,无论是原码还是补码,我们统计的都是实际在内存中二进制数中1的个数,使用移位操作就可以实现。
代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,n,a,con;//i控制循环次数,n存储输入的值,a储存n与1按位与的结果,con用来记录1的个数
while(scanf("%d",&n) != EOF)
{
i=32;
con=0;
while(i--)
{
a=n&1;
n=n>>1;
if(1 == a)
{
con++;
}
}
printf("%d\n",con);
}
system("pause");
}
执行结果

京公网安备 11010502036488号