知识点
x & (x - 1)
可以快速计算x中1的个数,比单纯的移位运算收敛的更快,效率更高,为什么可以这样呢,我们观察到,x - 1
实际上是把x的最后一个1变成了0,这样与运算后,可以最右边的1就被清除掉了。
int func(x)
{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
}
另外,我们还能借助上式子判断x是否为2的n次方,如果x为2的n次方,则与运算后结果会为0。
int func(int x)
{
if( (x&(x-1)) == 0 )
return 1;
else
return 0;
}