我试图将一个整数右移32,但结果是相同的数字。(例如5 >> 32
为5。(
若我尝试在Byte和Short上做同样的操作,它会起作用。例如,"(byte(5>>8"为0。
Integer有什么问题?
JLS 15.19。轮班操作员
如果左侧操作数的提升类型为int,则只有右侧操作数的五个最低阶位用作移位距离。
因此移位CCD_ 2是无效的。
移位转换将结果返回为int
或long
。所以,即使你换了byte
,你也会得到一个int
。
Java代码:
public static void main(String s[]) {
byte b = 5;
System.out.println(b >> 8);
int i = 8;
System.out.println(i >> 32);
}
字节码:
0: iconst_5
1: istore_1
2: getstatic #16 // Field java/lang/System.out:Ljava/io/PrintStream;
5: iload_1
6: bipush 8
8: ishr
9: invokevirtual #22 // Method java/io/PrintStream.println:(I)V ==> Using println(int)
12: bipush 8
14: istore_2
15: getstatic #16 // Field java/lang/System.out:Ljava/io/PrintStream;
18: iload_2
19: bipush 32
21: ishr
22: invokevirtual #22 // Method java/io/PrintStream.println:(I)V ==> Using println(int)
25: return