为什么我在
Windows和
Linux上使用整数编译指示下的XOR表达式0 ^ 2506133561得到不同的结果?
视窗:
perl -e "use integer; print 0^2506133561" -1788833735
Linux的:
perl -e 'use integer; print 0^2506133561' 2506133561
解决方法
Windows上的Perl解释器很可能使用32位整数,而您在Linux上使用的解释器则使用64位整数.
要测试它,请运行shell命令:
perl -V:ivsize
在每个系统上.它应该在32位perls上打印ivsize =’4′,在64位perls上打印ivsize =’8′.您还可以使用Config模块中的$Config {ivsize}在Perl脚本中获取此信息.
要强制将位操作的结果解释为带符号的32位数,即使在64位perls上,也可以使用pack
:
$num = unpack "l",pack "l",$num;
或者,您可以使用简单的位操作和算法,如mpapec建议:
$num &= 0xFFFFFFFF; $num -= 2**32 if $num >= 2**31;