2014-02-12 38 views

回答

3
perl -e "use bigint; print 0^2506133561;" 

輸出應爲2506133561不管Perl版本(32vs64位)

perldoc integer

最後用整數;對位運算符也有額外的影響。通常,操作數和結果被視爲無符號整數,但使用整數;操作數和結果被簽名。這意味着,除了別的以外,〜0是-1,並且-2是-3。

如果要強制符號整數,您可以執行其他計算,

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

是否-1788833735是錯誤的? – Saravanan

+0

@Saravanan檢查更新 –

+0

非常感謝。 問題是在Windows 32位的Perl。 – Saravanan

4

在Windows上你的Perl解釋器很可能使用的是32位整數,當你在Linux上使用一個具有64位整數。

爲了測試這一點,運行的外殼命令:

perl -V:ivsize 

每個系統上。它應該在32位perls上打印ivsize='4',而在64位perls上打印ivsize='8'。您還可以使用Config模塊中的$Config{ivsize}以Perl腳本獲取此信息。

強制位操作的結果被解釋爲一個有符號的32位數字,即使在64位皮爾斯,您可以使用pack

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

或者,你可以使用簡單的位操作和算術如mpapec建議:

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

感謝您的回覆.. 問題是與Windows中的32位perl。 – Saravanan

相關問題