2
int fn(unsigned int x)
{
int count = 0 ;
for(; x!=0; x&=(x-1))
    count ++;
return count;
}

我在编译器中尝试了它,但无法弄清楚发生了什么。我认为这与 in 的位数有关x,但是什么?

4

2 回答 2

9

有点诡计。:)

您将返回设置为的位数1

于 2013-04-08T10:30:24.373 回答
0

我解释你做了什么:)

根据您的代码,如果 x = 5,将发生以下情况

1) 在循环的第一次迭代中,

  a) condition check : .... 0101(X) ! = 0 ,
  b) body : count will be 1 ;
  c) increment part : .... 0101 &= .... 0100 => .... 0100

2) 在第二次迭代中

a) condition check : .... 0100(X) ! = 0 ,
  b) body : count will be 2 ;
  c) increment part : .... 0100 &= .... 0011 => .... 0000

计数等于 2,即 X(5) 中设置的位数

于 2013-04-08T10:44:59.447 回答