【发布时间】:2012-02-26 08:15:31
【问题描述】:
我必须创建一个函数bitParity(int x),它接受一个整数并返回1,如果x的位形式有奇数个0,否则返回0。
例如:bitParity(5) = 0, bitParity(7) = 1
但是,这很困难,因为我只能在这个问题上使用位运算符(! ˜ & ˆ | + << >> 是唯一合法的)。这意味着,没有循环、if-then 或任何类似的东西。可以使用常量。
到目前为止,我所拥有的不起作用,但我认为我应该将整数 16、8 和 4 的位移位,并将剩余的整数 XOR 移位。
谁能给点建议?谢谢。
【问题讨论】:
-
您应该始终检查按位示例的第一个位置是graphics.stanford.edu/~seander/bithacks.html#ParityLookupTable
-
查找表是最好的方法。 256 字节的存储空间是一个很小的代价。如果您使用 32 位整数,只需从表中读取 4 次。
-
除了@Joe 提到的,你也可以参考catonmat.net/blog/low-level-bit-hacks-you-absolutely-must-know。这有一些我觉得很有用的原始技巧。