5

Perl 长期以来一直是我选择的脚本语言,但我遇到了一个可怕的问题。默认情况下不支持长(64 位)整数。大多数情况下,整数只是一个字符串,它们适用于在大文件中查找,但有很多地方它们不起作用,&例如二进制、、、、、、。printfpackunpack<<>>

现在这些确实可以在较新版本的 Perl 中工作,但前提是它是使用 64 位整数支持构建的,如果我想让可移植代码在没有此选项的 Perl 上运行,这将无济于事。而且您并不总是能够控制运行您的代码的系统上的 Perl。

我的问题是 Python、PHP 和 Ruby 是否会遇到这样的问题,或者它们是否也依赖于版本和构建选项?

4

4 回答 4

14

高速硬件整数的大小(假设语言有它们)将始终取决于编译语言解释器(通常是 C)的编译器可用的任何大小的整数。

如果您需要跨平台/跨版本的大整数支持,Perl pragmause bigint;可以解决问题。如果您需要更多控制,bigint请使用模块的包装器Math::BigInt

use bigint;加载的范围内,该范围内的所有整数都将透明地升级为Math::BigInt数字。最后,在使用任何类型的大数库时,请务必不要使用9**9**9获取无穷大之类的技巧,因为您可能会等待一段时间 :)

于 2010-12-15T16:32:18.980 回答
4

在 Python 中,永远不会溢出。相反,python 会自动切换它正在使用的数字的实现。基本实现使用平台上的本机整数,但长整数使用无限长的数字实现。因此,您永远不必担心您的数字变得太大,python 只是自然地处理它。

于 2010-12-15T16:33:54.333 回答
2

从用户的角度来看,Tcl 8.5 的长整数支持非常好。在内部,它将整数表示为保存它们所必需的任何类型(直到并包括 bigints),并且消耗整数的东西将采用它们中的任何一个(尽管可能会施加它们自己的限制;您真的不想使用将仅适合作为 Unix 文件模式的 bigint...)

你真正需要考虑的唯一时间是当你去/来自一些固定宽度的二进制格式时。虽然这是相当明显的(毕竟它是固定的宽度)。

于 2010-12-15T16:30:06.943 回答
1

对不起先生,bigintMath::BigInt是核心模块的一部分。只需use使用其中一个,它就可以在任何平台上运行。

于 2010-12-15T16:29:37.433 回答