Java (-1>;>;32)==-1?
为什么Java中的表达式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)。
(-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