c - 下面的代码片段在c中返回什么

标签 c algorithm

unsigned mystery(int x){               
        unsigned i = 0;
    while(x){
            x = x&(x-1);
            i++;
        }
        return i;                                     
}

我认为这会返回“2”的幂直到我们给出的数字。

最佳答案

它计算 x 中设置的位数。

每次循环时,表达式x = x&(x-1)都会清除最低有效设置位,并且循环直到x为零。 i 计算发生这种情况之前的迭代次数,因此它最终等于原始参数中设置的位数。

此函数通常称为“popcount”

关于c - 下面的代码片段在c中返回什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51237788/

相关文章:

c - C 中的 Go 风格 channel

配置:错误:C 编译器无法创建可执行文件 (OSX El Capitan)

c++ - 将变量放置在绝对内存位置 (IAR C/C++)

c - 如何检索 native Windows 控件的正确大小?

algorithm - 寻找一种更智能的方法来随机拆分一维值范围

algorithm - 生成随机非奇异整数矩阵

arrays - 面试题: three arrays and O(N*N)

c++ - XLib 窗口名称问题

algorithm - 在最小堆中找到第 7 个最小元素的时间复杂度?

javascript - 试图弄清楚如何获得立方体的当前面