在二进制表示中,汉明重量是1的数.我遇到了网络并找到了一个O(1)答案:
v = v - ((v>>1) & 0x55555555);
v = (v & 0x33333333) + ((v>>2) & 0x33333333);
int count = ((v + (v>>4) & 0xF0F0F0F) * 0x1010101) >> 24;
Run Code Online (Sandbox Code Playgroud)
但是我不太了解算法,无法在任何地方找到它的描述.有人可以解释一下,尤其是最后一行(什么是*0x1010101然后>> 24意味着什么)?