我正在读一个包含以下功能的程序,即
int f(int n) {
int c;
for (c=0;n!=0;++c)
n=n&(n-1);
return c;
}
Run Code Online (Sandbox Code Playgroud)
我不太明白这个功能打算做什么?
我今天遇到的一个有趣的问题:什么是计算n位整数中1的数量的最快方法?是否有可能击败O(n)?
例如:
42 = 0b101010 => 3 ones
512 = 0b1000000000 => 1 one
Run Code Online (Sandbox Code Playgroud)
显然,天真算法只是简单计算.但是,有什么技巧可以加快速度吗?
(这仅仅是一个学术问题;通过实施这样的策略没有预期的性能提升.)