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

use*_*566 -5 c algorithm

unsigned mystery(int x){               
        unsigned i = 0;
    while(x){
            x = x&(x-1);
            i++;
        }
        return i;                                     
}
Run Code Online (Sandbox Code Playgroud)

我认为这会返回'2'的幂,直到我们给出的数字.

Chr*_*odd 5

它计算x中的设置位数.

每次循环时,表达式x = x&(x-1)将清除最不重要的设置位,并循环直到x为零. i计算迭代次数直到发生,因此它最终等于原始参数中的设置位数.

此功能通常称为"popcount"