3

查看了这个问题以了解为什么在包括 Java 在内的大多数语言中都没有算术左移运算符。但是我们如何处理负整数,因为左移会把它扔掉。以 -2^5 为例,结果应该是负数。

4

2 回答 2

9

不,除非您提交溢出,否则符号位永远不会被左移抛出。原因?在二进制补码编码中,负数的左侧全为 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
于 2012-08-23T11:51:27.753 回答
0

我最好的答案是在手术前后改变标志。这可能看起来太明显了,但问题是当符号发生变化时,这些位会以特定的方式发生变化

于 2012-08-23T11:54:43.523 回答