XOR operation with "use integer" gives different meanings for Windows and Linux

Why do I get different results for expressing XOR 0 ^ 2506133561in use integerpragma on Windows and Linux?

Window:

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

Linux:

perl -e 'use integer; print 0^2506133561'
2506133561
+3
source share
2 answers

Your Windows Perl interpreter most likely uses 32-bit integers, and the one you use on Linux has 64-bit ints.

To verify this, run the shell command:

perl -V:ivsize

for each system. It should print ivsize='4'on 32-bit perls and ivsize='8'on 64-bit perls. You can also get this information in a Perl script using $Config{ivsize}from the Config module .

32- 64- perls, pack:

$num = unpack "l", pack "l", $num;

, , mpapec, :

$num &= 0xFFFFFFFF;
$num -= 2**32 if $num >= 2**31;
+4
perl -e "use bigint; print 0^2506133561;"

2506133561 perl (32vs64 )

perldoc integer

, integer; . , integer; . , , ~ 0 -1, -2 -5 -6.

, ,

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

All Articles