这个很好用:
short x = (short)(0xffff >>> 10);
即。 x = 3F(63)
但是当完成相同但是使用十进制表示时:
short x = (short)((short)(-1) >>> 10);
然后x仍然是FFFF(-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
。