在java中的Shift操作实现
我最近在Java中使用了移位运算符,并注意到>>
运算符与C中的>>
具有相同的含义。在Java >>
有符号移位使第一位保持相同的值。 在Java中,相当于C shift的是>>>
运算符。 左移位运算符( <<
)与C中的相同,只是忽略第一位。
我想知道的是
- 为什么要做这个改变?
- 为什么符号不一致所以>>和<>>和<<<是无符号的?
- 签名class次运营商有用吗?
永远不需要符号感知左移,因为2:s补码表示将符号存储在最高有效位中。
以某种“符号识别”方式向左移一位的值之间没有区别,没有什么可以做的不同。 将位移到左侧,在最低有效位中插入0,就完成了。
使用带符号的数字,右移不是那么明确,这就是为什么有两个运营商。
据我所知, >>
和>>>
的含义在Java中一直是相同的。
为什么要做这个改变?
机器独立性。 >>
的含义在某种程度上取决于C语言。
有符号左移和无符号左移完全相同,因此不需要单独的运算符。
另一方面,Java没有无符号类型,因此它不能依赖于类型来确定要使用的转移。
作为参考,我认为你有倒退 – >>
签名右移, >>>
是无符号右移。