我必须创建一个函数bitParity(int x),该函数需要一个整数,如果1的位形式中存在奇数个0,则返回x,否则返回0

例如:bitParity(5) = 0, bitParity(7) = 1
但是,这很困难,因为我只能在此问题上使用位运算符(! ˜ & ˆ | + << >>是唯一合法的运算符)。这意味着,没有循环,if-then或任何类似的东西。可以使用常量。

到目前为止,我所拥有的都行不通,但是我认为我应该将整数1684时间的位移位,而将剩余的整数XOR移位。

谁能提供一些建议?谢谢。

最佳答案

这可以通过循环正确解决。但是,这是没有它的一种方法。

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)

编辑:我不需要&。更好的版本:
x ^= x >> 16
x ^= x >> 8
x ^= x >> 4
x ^= x >> 2
x ^= x >> 1
x &= 1;

10-04 22:22