n位整数中有多少1?

car*_*arl 4 language-agnostic bit-manipulation

我今天遇到的一个有趣的问题:什么是计算n位整数中1的数量的最快方法?是否有可能击败O(n)?

例如:

42 = 0b101010 => 3 ones
512 = 0b1000000000 => 1 one
Run Code Online (Sandbox Code Playgroud)

显然,天真算法只是简单计算.但是,有什么技巧可以加快速度吗?

(这仅仅是一个学术问题;通过实施这样的策略没有预期的性能提升.)