带有小数的Java逻辑位移错误

时间:2014-01-12 20:18:36

标签: java bit-manipulation

这个很好用:

short x = (short)(0xffff >>> 10);

即。 x = 3F(63)

但是当完成相同但是使用十进制表示时:

short x = (short)((short)(-1) >>> 10);

然后x仍然是FFFF(-1)。

为什么会这样?

1 个答案:

答案 0 :(得分:3)

因为short -1被提升为int,其值为-1,即:

1111 1111 1111 1111 1111 1111 1111 1111

将它向右移10位后,你有:

0000 0000 0011 1111 1111 1111 1111 1111

要修复它,你必须采取int的适当部分:

short x = (short)((-1 & 0xFFFF) >>> 10);

这样,(-1 & 0xFFFF)已经是一个int,因此它不包含前导1