我最近在 Java 中使用了移位运算符,并注意到 >>
运算符与 >>
的含义不同在 C 中。在 Java 中 >>
是有符号移位,使第一位保持相同的值。在 Java 中,相当于 C 的移位是 >>>
运算符(operator)。左移运算符 ( <<
) 与 C 中的相同,只是忽略第一位进行移位。
我想知道的是
- 为何进行此更改?
- 为什么表示法不一致,所以 >> 和 << 是带符号的移位,而 >>> 和 <<< 是无符号的?
- 带符号的移位运算符有什么用处吗?
最佳答案
永远不需要符号感知左移,因为 2:s 补码表示将符号存储在最高有效位中。
以某种“符号感知”方式向左移动一位的值没有区别,您无法做任何不同的事情。将位向左移动,在最低有效位中插入 0,就完成了。
对于带符号的数字,右移不那么明确,这就是为什么有两个运算符。
关于java - java中移位运算的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9722941/