4
我可以超過Perl的範圍迭代界限像這樣,有或無-Mbigint
:如何確定perl範圍迭代器的最大範圍?
$» perl -E 'say $^V; say for (0..shift)' 1e19
v5.16.2
Range iterator outside integer range at -e line 1.
我怎麼能確定這個上限,而不只是嘗試,直到我超過它?
我可以超過Perl的範圍迭代界限像這樣,有或無-Mbigint
:如何確定perl範圍迭代器的最大範圍?
$» perl -E 'say $^V; say for (0..shift)' 1e19
v5.16.2
Range iterator outside integer range at -e line 1.
我怎麼能確定這個上限,而不只是嘗試,直到我超過它?
這是一個IV。
>>
同樣適用於整數,所以你可以使用
my $max_iv = -1 >> 1;
my $min_iv = -(-1 >> 1) - 1;
它們也可以從一個IV的大小的。
my $max_iv = (1 << ($iv_bits-1)) - 1;
my $min_iv = -(1 << ($iv_bits-1));
的IV的大小可以使用
use Config qw(%Config);
my $iv_bits = 8 * $Config{ivsize};
或
my $iv_bits = 8 * length pack 'j', 0;
+ 1提醒我'j'格式說明符! – pilcrow 2013-04-23 14:49:46
嘗試(2 ** 31)-1或(2 ** 63)獲得-1 – mob 2013-04-22 21:24:28