对于32位数字:
function bitParity(int x) {
x ^= x >> 16;
x ^= x >> 8;
x ^= x >> 4;
x &= 0xf;
return (0x6996 >> x) & 1;
}
Run Code Online (Sandbox Code Playgroud)
这可以通过循环正确解决.但是这是一种没有它的方法.
x = (x & 0x0000FFFF) ^ (x >> 16)
x = (x & 0x000000FF) ^ (x >> 8)
x = (x & 0x0000000F) ^ (x >> 4)
x = (x & 0x00000003) ^ (x >> 2)
x = (x & 0x00000001) ^ (x >> 1)
Run Code Online (Sandbox Code Playgroud)
编辑:我不需要&.更好的版本:
x ^= x >> 16
x ^= x >> 8
x ^= x >> 4
x ^= x >> 2
x ^= x >> 1
x &= 1;
Run Code Online (Sandbox Code Playgroud)