冲刺一个64位数字
问题描述:
我想打印一个64位数字到另一个变量中。冲刺一个64位数字
#!/bin/perl
use strict;
use bigint;
my $str = "";
my $long_number = -1;
$str = sprintf("%016X", $long_number);
但是当我打印$str
我看到00000000ffffffff
。
这就像Perl认为我的$long_number
是一个32位数字。
我检查了我的Perl版本。它看起来是正确的:
的perl --version
这是perl的,专为sun4-Solaris的64int(37注册 补丁v5.8.4,看到的perl-V的详细
有谁知道我的问题从何而来?
答
虽然你在64位Solaris上运行,可能你有一个32位int的Perl。
您可以运行perl -V
(大写V)和检查编译时的选项:
Characteristics of this binary (from libperl):
Compile-time options: PERL_MALLOC_WRAP PERL_USE_SAFE_PUTENV
*USE_64_BIT_INT* USE_LARGE_FILES USE_PERLIO
或者perl -V:ivsize
;大小8表示64位,4位32位。
+0
我为编译时选项:USE_64_BIT_INT USE_LARGE_FILES和ivsize ='8'; – LnlB
答
您的Perl确实使用了由perl -v
暗示的64位整数。这由perl -V:ivsize
确认返回8
。
该问题与use bigint;
有关。使用它会导致您的-1
被替换为Math::BigInt->new(-1)
,并且该对象的编号就是您打印的内容。我敢打赌,这个对象的数字化将返回32位表示-1
。
删除use bigint;
应该做的伎俩。
请参阅:https://stackoverflow.com/questions/26168746/how-can-i-check-whether-my-perl-installation-is-32-or-64-bit –