c语言中,&符号为按位与运算符,得出两个整数的二进制中相同的位数,当要求整数中二进制的1的个数,可以让该整数与其他数进行按位与运算。
<<表示按位左移,将一个整数的二进制数向左移动数个位置,舍弃左边的数,最右边的数个位置补0。
如,2的二进制为0010,2<<1就为0100。
方法:1的二进制码为0001,设整数为k,k&1得出二进制最后一位是否为1, 再把0001(2)中的1按位左移,改变0001中1的位置。
如,1,k=9,9(10)=1001(2),1001&0001末尾的001相同,结果为!0,所以保留。
2,再进行k<<=1,k(2)=0010,再进行循环1001&0010=0,结果为0,不进行保留。
3,继续循环,直到k(2)=0000,最后统计保留的个数,就是1的个数。
#includeint main() { int n,count; int k=1; //1的二进制为0001 printf("请输入一个十进制数:n"); scanf("%d",&n); count=0; while(k) //直到k按位左移到0,停止 即0000 { if(n&k) //按位与运算,当n的二进制每一位与k中的1相等,即成立 count++; //统计1的数量 k<<=1; //将k按位左移,控制0001中1的位置 } printf("该二进制中含有%d个1",count); return 0; }



