Java将整数右移32



我试图将一个整数右移32,但结果是相同的数字。(例如5 >> 32为5。(

若我尝试在Byte和Short上做同样的操作,它会起作用。例如,"(byte(5>>8"为0。

Integer有什么问题?

JLS 15.19。轮班操作员

如果左侧操作数的提升类型为int,则只有右侧操作数的五个最低阶位用作移位距离。

因此移位CCD_ 2是无效的。

移位转换将结果返回为intlong。所以,即使你换了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

最新更新