求下面函数的返回值:
int func(int x)
{int countx = 0;
while(x)
{
countx++;
x = x&(x-1);
}
return countx;
}
假定x = 9999
10011100001111
答案: 8
解释:
x = x&(x-1)
&是按位与, 就是x同(x-1)按位与,再把值赋给x。
【1】就是把x右边的第一个1后面的数变为0(包括1)。
【2】也可以用来求出x是否为2幂次方数;当&的结果为0时,x原值是2幂次方数,否则就不是2幂次方数;