int func(x)
{
int countx =0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
}
解释下思路:
1.任何一个数字表示成2进制后,都可以用以下形式表示
[x]1[0]
其中1为最末尾的非0值(也就是1),[x]表示任意数字,[0]表示任意个0
2.当x - 1 时,其实是将最末尾的[x]1[0] - 1 变为了 [x]0[1]
[x]1[0] & [x]0[1] == [x][0][0]
3.[x] 继续分解用1的方式分解.
4.循环1-3直到,整个2进制不在含有1.
所以统计的是数字在2进制中的个数.