//可以用下面的方法
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的个数。