Perl长期以来一直是我选择的脚本语言,但我遇到了一个可怕的问题。默认情况下,不支持长(64位)整数。大多数情况下,整数只是一个字符串,它们可用于搜索大型文件,但有很多地方它们不起作用,例如二进制&
,printf
,pack
,unpack
,<<
,>>
。
现在这些可以在更新版本的Perl中工作,但前提是它是使用64位整数支持构建的,如果我想在不使用此选项的情况下构建的Perls上运行可移植代码,这无济于事。并且您并不总能在运行代码的系统上控制Perl。
我的问题是Python,PHP和Ruby是否遇到这样的问题,还是它们还依赖于版本和构建选项?
答案 0 :(得分:14)
高速硬件整数的大小(假设语言有它们)将始终取决于编译语言解释器的编译器可用的大小(通常为C)。
如果您需要跨平台/跨版本的大整数支持,Perl编译指示use bigint;
将完成这一操作。如果您需要更多控制权,bigint
是模块Math::BigInt
的包装器。
在加载use bigint;
的范围内,该范围内的所有整数将透明地升级为Math::BigInt
个数字。最后,当使用任何类型的大数字库时,请务必不要使用像9**9**9
这样的技巧来获得无穷大,因为您可能会等待一段时间:)
答案 1 :(得分:3)
在Python中,你永远不会溢出。相反,python会自动切换它正在使用的数字的实现。基本实现在平台上使用本机int,但长整数使用无限长度数实现。因此,您永远不必担心您的数字变得太大,python只是自然地处理它。
答案 2 :(得分:2)
从用户的角度来看,Tcl 8.5的长整数支持非常好。在内部,它表示整数,因为任何类型都需要它来保存它们(包括bigints)和消耗整数的东西将占用它们中的任何一个(尽管可能强加它们自己的限制;你真的不想使用一个数字只适合作为Unix文件模式的bigint ...)
你真正需要考虑的唯一一次就是当你要使用某种固定宽度的二进制格式时。虽然这是相当明显的(毕竟它是固定的宽度)。
答案 3 :(得分:1)
对不起,先生,bigint和Math::BigInt是核心模块的一部分。只是friggin'use
其中一个,它可以在任何平台上运行。