为什么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 = 01>>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 >> 32 == 1? 的全部内容, 来源链接: utcz.com/qa/399688.html