Kol*_*rie 3 java binary perl bit-shift bitwise-operators
当我移位-1时,我正在乱搞并注意到Java和Perl之间我不理解的差异.
我认为整数存储在二进制补码二进制中,所以如果有32位,则-1为11 ... 11(32次).
我期望-1 >> 1给$ 2 ^ 31 - 1 $ = 011 ... 11 = 2147483647.
我期望-1 << 1给出= 11 ... 110 = -2.
这些不同行为的原因是什么?这些标准在不同语言中的位置在哪里?
以下是Perl和Java的代码和打印输出:
在Perl中:
print (-1 >> 1, "\n");
print (-1 << 1, "\n");
Run Code Online (Sandbox Code Playgroud)
2147483647
4294967294
在Java中:
public class Tempy {
public static void main(String[] args){
System.out.println( -1 >> 1);
System.out.println( -1 << 1);
}
}
Run Code Online (Sandbox Code Playgroud)
-1
-2