查找数字奇偶校验的意外值
Unexpected value for finding parity of a number
以下代码来自编程基础访谈中关于如何找到数字奇偶校验的内容。
如果一个数中有奇数个1,则该数的奇偶性应为1。否则,它应该是 0。
1011 应该 return 1
但是,书中的代码给出了 1011 的 0。我错过了什么?
public static short parityBitByBitSmart(long x) {
short result = 0;
while(x != 0) {
result ^= 1;
x &= (x -1);
}
return result;
}
而且,我发现了另一个具有相同意外结果的代码示例
public static short parityBitByBit(long x) {
short result = 0;
while(x != 0) {
result ^= (x & 1);
x >>>= 1;
}
return result;
}
是不是忽略了符号位?
1011
(十进制)是 0b1111110011
(二进制)。并且,那个有偶个1
位。
以下代码来自编程基础访谈中关于如何找到数字奇偶校验的内容。
如果一个数中有奇数个1,则该数的奇偶性应为1。否则,它应该是 0。
1011 应该 return 1
但是,书中的代码给出了 1011 的 0。我错过了什么?
public static short parityBitByBitSmart(long x) {
short result = 0;
while(x != 0) {
result ^= 1;
x &= (x -1);
}
return result;
}
而且,我发现了另一个具有相同意外结果的代码示例
public static short parityBitByBit(long x) {
short result = 0;
while(x != 0) {
result ^= (x & 1);
x >>>= 1;
}
return result;
}
是不是忽略了符号位?
1011
(十进制)是 0b1111110011
(二进制)。并且,那个有偶个1
位。