2

Ruby Fixnumは 64 ビットRuby では 64 ビットです。

bits = 8 * 0.size 
# => 64

2 の補数以下の符号付き整数の最大値は です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.13、およびRubinius 2.2.10

4

0 に答える 0