冲刺一个64位数字

冲刺一个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的详细

有谁知道我的问题从何而来?

+1

请参阅:https://stackoverflow.com/questions/26168746/how-can-i-check-whether-my-perl-installation-is-32-or-64-bit –

虽然你在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;应该做的伎俩。