Ruby 最大整数
我需要能够确定 Ruby 中的系统最大整数。 有人知道怎么做吗,或者是否可能?
I need to be able to determine a systems maximum integer in Ruby. Anybody know how, or if it's possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
当整数溢出时,Ruby 会自动将它们转换为大整数类,因此(实际上)它们的大小没有限制。
如果您正在寻找机器的大小,即 64 位或 32 位,我在 ruby 中找到了 这个技巧-forum.com:
如果您正在寻找 Fixnum 对象的大小(足够小以存储在单个机器字中的整数),您可以调用
0.size
来获取 Fixnum 对象的数量字节。 我猜想在 32 位版本上应该是 4,但我现在无法测试。 另外,最大的 Fixnum 显然是2**30 - 1
(或2**62 - 1
),因为使用一位来将其标记为整数而不是对象引用。Ruby automatically converts integers to a large integer class when they overflow, so there's (practically) no limit to how big they can be.
If you are looking for the machine's size, i.e. 64- or 32-bit, I found this trick at ruby-forum.com:
If you are looking for the size of Fixnum objects (integers small enough to store in a single machine word), you can call
0.size
to get the number of bytes. I would guess it should be 4 on 32-bit builds, but I can't test that right now. Also, the largest Fixnum is apparently2**30 - 1
(or2**62 - 1
), because one bit is used to mark it as an integer instead of an object reference.阅读友好的手册? 谁愿意这样做?
Reading the friendly manual? Who'd want to do that?
在 ruby 中,Fixnums 会自动转换为 Bignums。
要找到尽可能高的 Fixnum,你可以这样做:
无耻地从 ruby-talk 讨论。 在那里查看更多详细信息。
In ruby Fixnums are automatically converted to Bignums.
To find the highest possible Fixnum you could do something like this:
Shamelessly ripped from a ruby-talk discussion. Look there for more details.
从 Ruby 2.4 开始就没有最大值了,因为 Bignum 和 Fixnum 统一为 Integer。 请参阅 Feature #12005
不会有任何溢出,会发生的是 out的记忆。
There is no maximum since Ruby 2.4, as Bignum and Fixnum got unified into Integer. see Feature #12005
There won't be any overflow, what would happen is an out of memory.
正如 @Jörg W Mittag 指出的:在 jruby 中,fix num 大小始终为 8 个字节长。 这段代码片段说明了事实:
as @Jörg W Mittag pointed out: in jruby, fix num size is always 8 bytes long. This code snippet shows the truth: