问题 :求二进制中1的个数?(条件:在使用循环时二进制中有几个1循环几次)
分析: 在二进制数中,全是由0和1组成的序列,通过对一个数的二进制序列和比这个数小1的二进制的观察,可以发现当一个数与这个数减1的值进行按位与运算时,总是丢失最右边的一个二进制1符号,因此,我们可以有这样的想法:既然每次都丢失掉原来二进制序列中的一个二进制符号1,那么我们可以创建一个循环来控制使其不断与比它小1的数进行按位与运算,直至为0;当为0时,说明它二进制序列中所有的1都已丢失,当我们把每次丢失的次数在变量count中保存起来,就可得到二进制中有几个1。
比如数字14:
每次进行按位与运算时count++;
源程序:
#include<stdio.h>
int main()
{
int num = 0;
int count = 0;
int i = 0;
printf("请输入一个十进制数:\n");
scanf("%d",&num);
printf("它的二进制数:\n");
for (i=31; i>=0; i--)
{
printf("%d",(num>>i)&1);
}
printf("\n");
printf("它的二进制数中1的个数:\n");
while (num)
{
count++; //由于第一次已经进入循环,因此需要提前加1
num = num&(num-1);
}
printf("%d\n",count);
return 0;
}
运行结果: