#include<stdio.h>
int 求二进制1的个数(int n)
{
int count=0;
int i = 0;
for (i = 0; i < 32; i++)
{
if ((n >> i) & 1 == 1)
{
count++;
}
}
return count;
}
void main()
{
printf("请输入一个整数:>");
int n;
scanf("%d",&n);
int z;
z = 求二进制1的个数(n);
printf("%d的二进制数中1的个数有%d个",n,z);
}
上面这种方法只能输入整数,对于浮点数,只能求其中的整数部分的1。上面的方法采用的是移位与1,从最右边开始移位,与1,如果数的第i位是1,与1与之后结果就是1,由count记录1的个数,总共移位32次。int类型是4个字节,所以是32位。
#include<stdio.h>
int 求二进制1的个数(int n)
{
int count = 0;
while (n)
{
n = n & (n - 1);
count++;
}
return count;
}
void main()
{
printf("请输入一个整数:>");
int n;
scanf("%d", &n);
int z;
z = 求二进制1的个数(n);
printf("%d的二进制数中1的个数有%d个", n, z);
}