Java右移整数乘以32

时间:2015-09-18 09:07:55

标签: java bit-manipulation

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

如果我尝试在Byte和Short上执行相同的操作,它可以工作。例如,“(byte)5>> 8”为0。

Integer有什么问题?

2 个答案:

答案 0 :(得分:9)

JLS 15.19. Shift Operators

  

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

所以转移32无效。

答案 1 :(得分:0)

移码转换会将结果作为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