位移位不适用于短值

时间:2019-05-26 08:41:57

标签: java binary int bit-shift short

我对短值进行位移位有一个问题:

System.out.println(Integer.toBinaryString(0b1100010001000100 >>> 12); // works correctly, output: 1100
System.out.println(Integer.toBinaryString( 0xFFFF & (short)(0b1100010001000100) >>> 12)) // does not work correctly, output: 1111111111111100

有什么问题,我该如何处理?

1 个答案:

答案 0 :(得分:2)

为清楚起见,0xFFFF & (short)(0b1100010001000100) >>> 12的意思是0xFFFF & ((short)(0b1100010001000100) >>> 12)。因此,移位后按位与是最后一个。

有一个规则,即short在移位(和大多数其他操作)之前会转换为int,因此short首先要符号扩展为int ,则出现更多前导值,因为该值是负数。如果在此隐式转换和移位之间按位与发生,则多余的将被删除:

(0xFFFF & (short)(0b1100010001000100)) >>> 12