写一个函数返回参数二进制中 1 的个数
比如:15 二进制为: 0000 1111 4 个 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位数
}
如果让我们求一个十进制数中1 的个数,我们会将这个数除以10之后看余数是不是1,然后将得到的商除以10看余数是不是1,依次类推,直到商为0.
如下图解释:
那么我们求二进制数的时候也一样,将二进制除以2,看得到的余数是不是1,再用商除以2,一直到商为0为止。
如图:
代码如下:
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value)
{
int num = 0;
while(value)//value为0时跳出循环
{
if(value%2)//如果余数为1,则num自加1
num++;
value = value/2;//将得到的商再付给value
}
return num;
}
int main()
{
int i = 0;
int num = 0;
printf("请输入一个正数:");
scanf("%d",&i);
num = count_one_bits(i);//num为记录1 的个数
printf("num=%d\n",num);
system("pause");
return 0;
}
结果:
在这里,还可以用位运算解这道题。
代码如下:
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value)
{
int num = 0;
while(value)
{
if( (value&1) ==1)
num++;
value>>=1;//右移
}
return num;
}
int main()
{
int i = 0;
int num = 0;
printf("请输入一个正数:");
scanf("%d",&i);
num = count_one_bits(i);
printf("num=%d\n",num);
system("pause");
return 0;
}