java - 位移,得到不正确的值
问题描述
对于这种转变:
System.out.println(0b10000000_00000000_00000000_00000001>>>32);
我得到这个输出值:
-2147483647
这是对的吗?
解决方案
JLS说:
如果左侧操作数的提升类型是 int,则只有右侧操作数的五个最低位用作移位距离。就好像右手操作数受到按位逻辑与运算符 & (§15.22.1) 的影响,掩码值为 0x1f (0b11111)。因此,实际使用的移位距离始终在 0 到 31 的范围内,包括 0 到 31。
由于 32 是二进制的 100000,因此只取了最低的五个位,这意味着您根本不移动左侧操作数。
换句话说,0b10000000_00000000_00000000_00000001>>>32
等价于0b10000000_00000000_00000000_00000001>>>0
。
因此结果是0b10000000_00000000_00000000_00000001
。
推荐阅读
- scala - 如何在 Java 对象数据集之上优化数据集聚合
- r - 如何从R中包含多个括号的字符串中删除/替换特定的括号
- python - 如何根据字符串和特殊字符过滤 pd.Dataframe?
- c++ - 区分 C++ 中的 logic_error
- abap - 无法使用 REUSE_ALV_FIELDCATALOG_MERGE 创建字段目录
- audio - 我可以使用 MediaDevices.getUserMedia() 连接到多个音频输入设备以获取 webrtc 流吗?
- c# - Unity & Unity Remote 5 Android 无法 USB 测试
- python - Python:var = var / 5 * 2 的计算结果与 var /= 5 * 2 不同
- excel - 比较同一工作表上的两行
- mongodb - mongoDB查询比较对象中的两个键