据我了解,将正整数向左移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
答案 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等等