我一直在试图通过一个功能,有人写练习,但我似乎无法得到正确的答案。
位奇偶校验-如果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
----