我对短值进行位移位有一个问题:
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
有什么问题,我该如何处理?
答案 0 :(得分:2)
为清楚起见,0xFFFF & (short)(0b1100010001000100) >>> 12
的意思是0xFFFF & ((short)(0b1100010001000100) >>> 12)
。因此,移位后按位与是最后一个。
有一个规则,即short
在移位(和大多数其他操作)之前会转换为int
,因此short
首先要符号扩展为int
,则出现更多前导值,因为该值是负数。如果在此隐式转换和移位之间按位与发生,则多余的将被删除:
(0xFFFF & (short)(0b1100010001000100)) >>> 12