gpt4 book ai didi

java - 为什么 1>>32 == 1?

转载 作者:IT老高 更新时间:2023-10-28 21:08:13 24 4
gpt4 key购买 nike

我想知道这是否是 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 移位运算符

如果左侧操作数的提升类型是int只有右侧操作数的五个最低位用作移动距离。就好像右手操作数经过按位逻辑与运算符 & (§15.22.1) 掩码值为 0x1f。因此,实际使用的移位距离始终在 0 到 31 的范围内,包括 0 到 31。

如果左侧操作数的提升类型是long,则只有右侧操作数的最低六位用作移动距离。就好像右手操作数经过位逻辑与运算符 & (§15.22.1) 与 掩码值 0x3f。因此,实际使用的移位距离始终在 0 到 63 之间,包括 0 到 63。

(强调我的)

关于java - 为什么 1>>32 == 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3170412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com