返回以下函数是什么?

时间:2013-04-08 10:29:03

标签: c++ c return output generic-programming

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

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

2 个答案:

答案 0 :(得分:9)

这是一个bit trick。 :)

您将返回设置为1的位数。

答案 1 :(得分:0)

我解释你做了什么:)

根据您的代码,如果x = 5

,将会发生以下情况

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

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

2)在第二次Itearation

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

计数等于2,即X(5)

中设置的位数