用c语言实现输入一个十进制数,计算其转换为二进制数后其中包含1的个数

时间:2022-06-11 11:09:35

这个问题有两个解决方法。第一个就是用我们平时十进制转换二进制的算法,即短除法。

第二个就是用其本身与上其二进制数减一,

例如:x&(x-1)      当x=5时, 5的二进制是0101   

0101 & (0101-1)   ==   0101 & 0100 == 0100

0100 & (0100-1)   ==   0100 & 0011 == 0000

一共计算了两次,也就是说5的二进制数一共只有2个1.

下面是代码实现:

#include<stdio.h>
int count_bits(unsigned int value)//定义形参
{

int one = 0;//定义计数器
while(value != 0)
{
if(value % 2 == 1)//短除法计算
{
one ++;
value = value / 2;
}
}
return one;
}
int main()
{
int ret = 0;
ret = count_bits(15);//调用函数
printf("%d\n",ret);
return 0;
}


这是第二种算法:

#include<stdio.h>
int count_bit(unsigned int value)
{
int count = 0;
while(value)
{
count++;
value = value & (value - 1);//value与其二进制减1,结果再赋给value
}
return count;//返回计数器
}

int main()
{
int ret = 0;
ret = count_bit(5);
printf("%d\n",ret);
return 0;
}