左移操作员如何保留标志?

时间:2012-08-23 11:46:32

标签: java bit-manipulation bit bit-shift

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我最好的答案是,只需在操作前后更改标志即可。它可能看起来太明显,但事实是当符号改变时,比特会以特定方式发生变化