为什么1 >> 32 == 1?

我想知道这是否是JVM错误?

Java版本“ 1.6.0_0” OpenJDK运行时环境(IcedTea6 1.4.1)(6b14-1.4.1-0ubuntu13)OpenJDK

64位服务器VM(内部版本14.0-b08,混合模式)

class Tmp {

public static void main(String[] args) {

System.out.println("1>>1 = "+(1>>1));

System.out.println("1>>2 = "+(1>>2));

System.out.println("1>>31 = "+(1>>31));

System.out.println("1>>32 = "+(1>>32));

System.out.println("1>>33 = "+(1>>33));

}

}

当我运行它时会产生这个:

1>>1 = 0

1>>2 = 0

1>>31 = 0

1>>32 = 1 <---------- should be 0 i think

1>>33 = 0

对于32的任意倍数,我也得到相同的结果。

我需要编写自己的右移来检查吗?

回答:

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.22.1

15.19移位运算符

如果左侧操作数的提升类型为 ,则

&(§15.22.1)一样。因此,实际使用的移动距离始终在0到31(含)范围内。

如果左侧操作数的提升类型很 ,则 。就像右侧操作数受到

的按位逻辑AND运算符&(§15.22.1)一样。因此,实际使用的移动距离始终在0到63之间(包括0和63)。

(强调我的)

以上是 为什么1 &gt;&gt; 32 == 1? 的全部内容, 来源链接: utcz.com/qa/399688.html

回到顶部