looked in this question 理解为什么在包括 Java 在内的大多数语言中没有算术左移运算符。但是我们如何处理负整数,因为左移会将它扔掉。以 -2^5 为例,结果应该是负数。

最佳答案

不,除非您提交溢出,否则左移永远不会抛出符号位。原因?在二进制补码编码中,负数在 te 左侧全是 1,而正数全是零。这就像符号位被复制到右边。顺便说一句,这正是“符号扩展”一词有意义的原因,这就是 Java 中默认右移的工作方式。

  int i = -1;
  System.out.format("%3d = %s\n", i, Integer.toBinaryString(i));
  i <<= 5;
  System.out.format("%3d = %s\n", i, Integer.toBinaryString(i));

打印
 -1 = 11111111111111111111111111111111
-32 = 11111111111111111111111111100000

关于java - 左移运算符如何保留符号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12090831/

10-09 13:22