查找数字奇偶校验的意外值

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位。