perl - 如何确定 perl 范围迭代器的最大范围?

标签 perl int range limit

无论是否有 -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;

关于perl - 如何确定 perl 范围迭代器的最大范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16156698/

相关文章:

regex - Perl 字符串正则表达式 - 需要解释

长名称的 Perl 函数命名约定

Perl 交叉编译 : MAKE

scala - 为什么 scalac 盒子是 Int?

c++ - 为什么在 64 位机器上的 C++ 中 int 的大小不是 8 个字节。还有 gcc 的任何版本都支持 8 字节 int 吗?

colors - CIELAB颜色空间中的坐标范围是多少?

Python 3,range().append() 返回错误 : 'range' object has no attribute 'append'

windows - cpan 与 -MCPAN - Perl

c++ - 有没有一种方法可以使用 2 位大小的类型而不是 int,只需插入新的类型名称而不是 int?

c++ - 如何写一个简单的范围概念?