我最近在Java中使用了移位运算符,并注意到>>
运算符与C中的>>
的含义不同。在Java中>>
是签名的移位,它保留了第一个位相同的值。在Java中,等同于C shift的是>>>
运算符。左移位运算符(<<
)与C中的相同,只是忽略第一位。
我想知道的事情是
答案 0 :(得分:2)
从不需要符号感知的左移,因为2:s补码表示将符号存储在最高位。
以某种“符号识别”方式向左移一位的值没有区别,没有什么可以做的不同。将这些位向左移,在最低有效位中插入0,就完成了。
使用带符号的数字,向右移动不如此明确,这就是为什么有两个运营商。
答案 1 :(得分:2)
据我所知,>>
和>>>
的含义在Java中始终是相同的。
为什么要进行此更改?
机器独立性。 >>
的含义在某种程度上取决于C。
答案 2 :(得分:1)
有符号左移和无符号左移是完全等效的,因此不需要单独的操作符。
另一方面,Java没有无符号类型,所以它不能依赖于类型来确定要使用的转移。
作为参考,我认为你向后退了 - >>
是右移,>>>
是无符号右移。