我一直在试图通过一个功能,有人写练习,但我似乎无法得到正确的答案。
位奇偶校验-如果x包含奇数0,则返回1
示例:位奇偶校验(5)=0,位奇偶校验(7)=1

int bitParity(int x) {

x = (x >> 16) ^ x;
x = (x >> 8) ^ x;
x = (x >> 4) ^ x;
x = (x >> 2) ^ x;
x = (x >> 1) ^ x;
return x&1;
}

所以让我们以5为例。二进制中的5是0101,它的偶数是0,所以它应该返回0。
因为x>>2之前的所有内容都会返回0101,所以我从x=(x>>2)^x开始
(x>>2) = 0001

(x>>2) ^ x = 0001 XOR 0101 = 0100

x现在是0100
然后我计算x=(x>>1)^x
(x>>1) = 0010
(x>>1) ^ x = 0010 XOR 0100 = 0110

x现在是0110
然后返回(x&1),即(0110&1111)=0110
如果我正确理解了所有内容,如果0是偶数,位奇偶校验应该返回所有0,就像x=5的情况一样。我做错什么了?

最佳答案

一切都是正确的,直到最后一步解释错误。
根据您的示例x & 1(在初始计算之后),1表示为x = 0110(而不是1111)
所以0000 0000 0000 0001

0110
0001
----
0000
----

10-06 14:06