2

Ruby Fixnums在 64 位 rubies 上是 64 位的:

bits = 8 * 0.size 
# => 64

二进制补码下的最大有符号整数是9_223_372_036_854_775_807,但 Ruby 中的最大 Fixnum 只有一半:

[(1 << 62) - 1,  1 << 62].map(&:class)
# => [Fixnum, Bignum]
max = (1 << 62) - 1 
# => 4611686018427387903
max.to_s 2
# => "11111111111111111111111111111111111111111111111111111111111111" (62 bits)

Ruby 如何使用缺失的位?MRI Fixnum doc仅简要提及:

[Fixnum] 保存可以用本机机器字(减 1 位)表示的整数值。如果对 Fixnum 的任何操作超出此范围,则该值将自动转换为 Bignum。

测试:MRI 2.1.2JRuby 1.7.13Rubinius 2.2.10

4

0 回答 0