原码 反码 补码 右移一位 结果(原码) -1 = 1000 0001, 1111 1110, 1111 1111, 1111 1111 -1 -2 = 1000 0010, 1111 1101, 1111 1110, 1111 1111 -1 -3 = 1000 0011, 1111 1100, 1111 1101, 1111 1110 -2 -4 = 1000 0100, 1111 1011, 1111 1100, 1111 1110 -2 -5 = 1000 0101, 1111 1010, 1111 1011, 1111 1101 -3 -6 = 1000 0110, 1111 1001, 1111 1010, 1111 1101 -3
因此 对于 val / 2 != val >> 1的原因是:val为负数且为奇数。