在java中的Shift操作实现

我最近在Java中使用了移位运算符,并注意到>>运算符与C中的>>具有相同的含义。在Java >>有符号移位使第一位保持相同的值。 在Java中,相当于C shift的是>>>运算符。 左移位运算符( << )与C中的相同,只是忽略第一位。

我想知道的是

  • 为什么要做这个改变?
  • 为什么符号不一致所以>>和<>>和<<<是无符号的?
  • 签名class次运营商有用吗?

永远不需要符号感知左移,因为2:s补码表示将符号存储在最高有效位中。

以某种“符号识别”方式向左移一位的值之间没有区别,没有什么可以做的不同。 将位移到左侧,在最低有效位中插入0,就完成了。

使用带符号的数字,右移不是那么明确,这就是为什么有两个运营商。

据我所知, >>>>>的含义在Java中一直是相同的。

为什么要做这个改变?

机器独立性。 >>的含义在某种程度上取决于C语言。

有符号左移和无符号左移完全相同,因此不需要单独的运算符。

另一方面,Java没有无符号类型,因此它不能依赖于类型来确定要使用的转移。

作为参考,我认为你有倒退 – >>签名右移, >>>是无符号右移。