Java:转移负数

时间:2015-04-07 18:09:08

标签: java

据我了解,将正整数向左移1的结果与将其乘以2的结果相同。(如果它不溢出)

负整数会发生什么?

x<<如果没有溢出,1总是等于x * 2?

我试过了:

int num = -1;
for (int i= 0; i < 32; i++){
    System.out.println(num << i);
}

打印

-1
-2
-4
-8
-16
-32
-64
-128
-256
-512
-1024
-2048
-4096
-8192
-16384
-32768
-65536
-131072
-262144
-524288
-1048576
-2097152
-4194304
-8388608
-16777216
-33554432
-67108864
-134217728
-268435456
-536870912
-1073741824
-2147483648

2 个答案:

答案 0 :(得分:4)

是的,1向左移位总是等于乘以2(溢出除外)。 JLS, Section 15.19,甚至是这样说的:

  

n&lt;&lt; s是n个左移位位;这相当于(即使发生溢出)将2乘以幂s。

我认为JLS声明&#34;即使发生溢出&#34;因为它等同于可能溢出的乘法运算。

答案 1 :(得分:1)

这是一个位移,你应该看一下比特是怎么回事:-1是0xFFFFFFFF,1比特移到左边后我们得到0xFFFFFFFE它是-2等等