Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 带“XOR”的异或运算;使用整数;在Windows和Linux上提供不同的值_Perl_32bit 64bit - Fatal编程技术网

Perl 带“XOR”的异或运算;使用整数;在Windows和Linux上提供不同的值

Perl 带“XOR”的异或运算;使用整数;在Windows和Linux上提供不同的值,perl,32bit-64bit,Perl,32bit 64bit,为什么我在Windows和Linux上的use integerpragma下的XOR表达式0^2506133561会得到不同的结果 窗口: perl -e "use integer; print 0^2506133561" -1788833735 Linux: perl -e 'use integer; print 0^2506133561' 2506133561 无论perl版本如何(32vs64位),输出都应为2506133561 从 最后,使用整数;对按位运算符也有额外的影响。通常,操

为什么我在Windows和Linux上的
use integer
pragma下的XOR表达式
0^2506133561
会得到不同的结果

窗口:

perl -e "use integer; print 0^2506133561"
-1788833735
Linux:

perl -e 'use integer; print 0^2506133561'
2506133561
无论perl版本如何(32vs64位),输出都应为
2506133561

最后,使用整数;对按位运算符也有额外的影响。通常,操作数和结果被视为无符号整数,但使用整数;操作数和结果是有符号的。这意味着,除其他外,~0是-1,-2&-5是-6

如果要强制使用有符号整数,可以执行其他计算

my $n = 0^2506133561;
$n -= 2**32 if $n >>31;

Windows上的Perl解释器很可能使用32位整数,而Linux上使用的是64位整数

要对此进行测试,请运行shell命令:

perl -V:ivsize
在每个系统上。它应该在32位perls上打印
ivsize='4'
,在64位perls上打印
ivsize='8'
。您还可以使用模块中的
$Config{ivsize}
在Perl脚本中获取此信息

要强制位操作的结果即使在64位PERL上也被解释为有符号的32位数字,可以使用:

或者,您可以使用简单的位运算和算术,如mpapec建议的:

$num &= 0xFFFFFFFF;
$num -= 2**32 if $num >= 2**31;

64位windows 7和rhel 6 64位感谢您的回复。。问题是windows中的perl是32位的。非常感谢。问题在于windows中的perl是32位的。
$num = unpack "l", pack "l", $num;
$num &= 0xFFFFFFFF;
$num -= 2**32 if $num >= 2**31;