java - java中移位运算的实现

标签 java c language-implementation

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

我想知道的是

  • 为何进行此更改?
  • 为什么表示法不一致,所以 >> 和 << 是带符号的移位,而 >>> 和 <<< 是无符号的?
  • 带符号的移位运算符有什么用处吗?

最佳答案

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

以某种“符号感知”方式向左移动一位的值没有区别,您无法做任何不同的事情。将位向左移动,在最低有效位中插入 0,就完成了。

对于带符号的数字,右移那么明确,这就是为什么有两个运算符。

关于java - java中移位运算的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9722941/

相关文章:

c - C 中的指针行为 : Initializing Linked List Head after Node

使用 & 和不使用 & 的 C 3d 数组指针衰减

x86 - 进程内存中的 Unicode 字符串

compiler-construction - 在使用 LLVM 编写 JIT 时,您将如何重用 C 操作码实现?

java - rJava 泛型类型

java - 尽管组件扫描是正确的,但无法 Autowiring 字段

java - 如何从 servlet 中清除浏览器缓存?

c - While 循环带我去兜风(C 语言)!

c++ - 通过 C/C++ 编译和编译器错误/限制

java - 如何在scala中生成protobuf?