【问题标题】:What is the following function returning ?以下函数返回什么?
【发布时间】:2013-03-30 09:38:17
【问题描述】:
int fn(unsigned int x)
{
int count = 0 ;
for(; x!=0; x&=(x-1))
    count ++;
return count;
}

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

【问题讨论】:

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


    【解决方案1】:

    这是一个bit trick。 :)

    您正在返回设置为 1 的位数。

    【讨论】:

      【解决方案2】:

      我解释你做了什么:)

      根据您的代码,如果 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) 中设置的位数

      【讨论】:

        猜你喜欢
        • 2020-02-24
        • 1970-01-01
        • 2022-01-20
        • 2012-05-15
        • 1970-01-01
        • 2022-12-31
        • 2017-07-16
        • 2020-07-25
        • 2014-05-04
        相关资源
        最近更新 更多