问题:写一个函数,统计一个int类型(32)的数中有多少位二进制数1?
1.理解:写一个函数,统计 int (32) 的数转化成二进制后,这个二进制数中有几个1?
2.思路:使用按位与" &",相同真,不同则假。
0000 0000 0000 0000 0000 0000 0000 0001
& 1111 1111 1111 1111 1111 1111 1111 1111
= 0000 0000 0000 0000 0000 0000 0000 0001
3.实现代码:
#include"stdio.h"
int main(int argc, const char *argv[])
{
int num=0;
int b=1;
int i,j=0;
scanf("%d",&num);//输入一个数
for(i=1;i<=32;i++)
{
if(num&b)
{
j++;
}
num>>=1;//把已经比较过的位去掉
}
printf("%d\n",j);//得到1 的个数
return 0;
}