我试图找到一个位串的奇偶校验,以便如果 x 有一个奇数的 0 则它返回 1。
我只能使用基本的按位运算,到目前为止我通过了大部分测试,但我想知道两件事:
为什么 x ^ (x + ~1) 有效?我偶然发现了这一点,但如果有奇数位,它似乎给你 1,如果是偶数,它似乎给你 1。像 7^6 = 1 因为 7 = 0b0111
这是解决问题的正确方向吗?我假设我的问题源于第一个操作,特别是 (x + ~1),因为它会溢出某些 2 的补码。谢谢
代码:
int bitParity(int x) {
int first = x ^ (x + ~1);
int second = first ^ 1; // if first XOR gave 1 you'll return 0 here
int result = !!second;
return result;
}