1.求一个数的二进制序列中1的个数
优化方案:
一般方法:首先我们拿到一个十进制数,先得将它转化成二进制数(因为只需要求1的个数即可,因此不必管二进制序列的顺序,只需要求出1的个数即可),将十进制转化成二进制一般用除2取余的方法,而所得的余数即是二进制序列中的数,而通过计数器可以数出1的个数。
代码如下:
#include <stdio.h>
int main()
{
int a;
int count;
printf("输入一个十进制数\n");
scanf("%d",&a);
count=count_one_bits(a);
printf("%d",count);
return 0;
}
int count_one_bits(int x)
{
int y;
int z;
int count=0;
while(x!=0)
{
y=x%2;
z=x/2;
if(y==1)
count++;
x=z;
}
return count;
}
优化方案:
(1).上述方法中利用x%2,以及x/2,来完成除2取余法所需的步骤。而在C语言中x%2以及x/2可以理解成二进制数的一些操作。x%2是否等于1其实是取一个二进制数的最低位看它是否等于1,而x/2则是将二进制数右移1位,因此判断x%2是否等于1可以用位运算符进行操作【判断x&0x1是否等于1(因为&是只要有一个为0,结果就为0,举例:11110001&00000001=00000001而11110000&00000001&#