Java (-1>;>;32)==-1?

Java (-1>;>;32)==-1?,java,expression,operator-keyword,bit-shift,shift,Java,Expression,Operator Keyword,Bit Shift,Shift,为什么Java中的表达式(-1>>32)的计算结果是-1,而不是预期的0?>-shift运算符应填写前面的0,因此结果应将所有位设置为0 这很奇怪,因为它破坏了>>的语义:例如,(-1>>>x)将所有0>x的前x位设置为0以将cidr网络掩码扩展为其32位等效项,但似乎必须单独处理/32掩码。检查 引自答案作者 根据Java语言规范: 如果左侧操作数的提升类型为int,则只有五个 右操作数的最低阶位用作移位 距离。这就好像右操作数受到了 掩码值为0x1f的位逻辑与运算符&(§15.22.1)。

为什么Java中的表达式
(-1>>32)
的计算结果是
-1
,而不是预期的
0
>
-shift运算符应填写前面的0,因此结果应将所有位设置为0

这很奇怪,因为它破坏了
>>
的语义:例如,
(-1>>>x)
将所有
0>x的前x位设置为0
以将cidr网络掩码扩展为其32位等效项,但似乎必须单独处理/32掩码。

检查

引自答案作者

根据Java语言规范:

如果左侧操作数的提升类型为int,则只有五个 右操作数的最低阶位用作移位 距离。这就好像右操作数受到了 掩码值为0x1f的位逻辑与运算符&(§15.22.1)。 因此,实际使用的换档距离始终在0到0之间 31,包括在内

长简言之:由于操作数范围的限制,
-1>>32
相当于
-1>>0
,后者是
-1