在java中的Shift操作实现

时间:2012-03-15 15:30:32

标签: java c language-implementation

我最近在Java中使用了移位运算符,并注意到>>运算符与C中的>>的含义不同。在Java中>>是签名的移位,它保留了第一个位相同的值。在Java中,等同于C shift的是>>>运算符。左移位运算符(<<)与C中的相同,只是忽略第一位。

我想知道的事情是

  • 为什么要进行此更改?
  • 为什么符号不一致所以&gt;&gt;和&lt;&lt;签名班次和&gt;&gt;&gt;和&lt;&lt;&lt;未签名?
  • 签名班次运营商有用吗?

3 个答案:

答案 0 :(得分:2)

从不需要符号感知的左移,因为2:s补码表示将符号存储在最高位。

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

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

答案 1 :(得分:2)

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

  

为什么要进行此更改?

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

答案 2 :(得分:1)

有符号左移和无符号左移是完全等效的,因此不需要单独的操作符。

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

作为参考,我认为你向后退了 - >>是右移,>>>是无符号右移。