Java/Perl中的位差异

Java/Perl中的位差异,java,perl,binary,bitwise-operators,bit-shift,Java,Perl,Binary,Bitwise Operators,Bit Shift,我当时正在胡闹,当我将位移位为-1时,我注意到Java和Perl之间的差异,我不理解这些差异 我认为整数存储在2的补码二进制中,所以如果有32位,-1是11…11(32倍)。 我希望-1>-1能拿出$2^31-1$=011…11=2147483647。 我希望-1>1,“\n”); 打印(-1>1); System.out.println(-1Perl的位移位本质上是无符号的,因此-1被视为2^32-1,它会自动填充0,因此-1>-1是2^31-1和-1>根据,您可以使用integer强制Per

我当时正在胡闹,当我将位移位为-1时,我注意到Java和Perl之间的差异,我不理解这些差异

我认为整数存储在2的补码二进制中,所以如果有32位,-1是11…11(32倍)。
我希望-1>-1能拿出$2^31-1$=011…11=2147483647。
我希望-1>1,“\n”); 打印(-1>1);
System.out.println(-1Perl的位移位本质上是无符号的,因此-1被视为2^32-1,它会自动填充0,因此
-1>-1
是2^31-1和
-1>

根据,您可以
使用integer
强制Perl使用有符号值。(有符号整数-1被视为无符号整数时为2^32-1或2^64-1,具体取决于您的Perl构建。具体取决于
Perl-V:ivsize
print (-1 >> 1, "\n");
print (-1 << 1, "\n");
public class Tempy {
    public static void main(String[] args){
        System.out.println( -1 >> 1); 
        System.out.println( -1 << 1);
    }
}