2017-06-29 58 views
-1

我想打印一個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 –

回答

2

雖然你在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

2

您的Perl確實使用了由perl -v暗示的64位整數。這由perl -V:ivsize確認返回8

該問題與use bigint;有關。使用它會導致您的-1被替換爲Math::BigInt->new(-1),並且該對象的編號就是您打印的內容。我敢打賭,這個對象的數字化將返回32位表示-1

刪除use bigint;應該做的伎倆。