繁体   English   中英

位移,得到不正确的值

[英]Bits shifting, getting incorrect value

对于这种转变:

System.out.println(0b10000000_00000000_00000000_00000001>>>32);

我得到这个 output 值:

-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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM