为什么Ruby Fixnums缺少一点?

时间:2014-07-06 18:48:50

标签: ruby fixnum

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

bits = 8 * 0.size 
# => 64

two's complement下的最大有符号整数是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

0 个答案:

没有答案