//可以用下面的方法int count_one(int num){int count = 0; //记录1的个数while (num){++count;num &= (num - 1); }return count;}
使 num=10;
num=10= 1010B
num-1=9= 1001B
执行:num&=(num-1); //num=num&(num-1) //目的是去掉二进制末尾的1
&运算之后 num=1000B=8
因为num!=0 所以接着循环
再执行:num&=(num-1);
num=8 = 1000B
num-1=7 = 111B
&运算之后 num=0000=0
此时的count中就是二进制中1的个数。