Java的>>与>>>运算符?

2022-09-02 22:53:31

我没有我的Java参考书,我很难用Google找到答案。

Java中的“>>”和“>>>”运算符有什么区别?

int value = 0x0100;

int result = (value >> 8);
System.out.println("(value >> 8) = " + result);  // Prints: "(value >> 8) = 1"

result = (value >>> 8);
System.out.println("(value >>> 8) = " + result); // Prints: "(value >>> 8) = 1"

答案 1

有符号整数使用高阶位来表示符号。

所以保留了标志,而没有。这就是为什么被称为算术移位,并且是逻辑移位。>>>>>>>>>>

这样,您可以执行以下操作(假设为 32 位整数):

  • -10 >> 1产生 -5(0xFFFFFFFB产生 - 注意高阶位保持不变。0xFFFFFFF6 >> 1
  • -10 >>> 1产量2147483643(产量0x7FFFFFFB - 注意所有位都已移位,因此高阶位现在为零。根据二进制补码算术,该数字不再是负数。0xFFFFFFF6 >>> 1

对于正整数,并且行为相同,因为高阶位已经为零。>>>>>

这也解释了为什么不需要操作员。由于将位向左滑动会破坏符号,因此它将映射到没有合理的算术运算。<<<


答案 2