对于这种转变:
System.out.println(0b10000000_00000000_00000000_00000001>>>32);
Run Code Online (Sandbox Code Playgroud)
我得到这个输出值:
-2147483647
这是正确的吗?
该JLS说:
如果左侧操作数的提升类型是 int,则仅将右侧操作数的五个最低位用作移位距离。就好像右手操作数受制于掩码值为 0x1f (0b11111) 的按位逻辑 AND 运算符 &(第 15.22.1 节)。因此实际使用的移动距离总是在 0 到 31 的范围内,包括 0 到 31。
由于 32 是二进制的 100000,因此只取最低的 5 位,这意味着您根本不会移位左侧操作数。
换句话说,0b10000000_00000000_00000000_00000001>>>32相当于0b10000000_00000000_00000000_00000001>>>0。
因此结果是0b10000000_00000000_00000000_00000001。
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |