わたなべです. TEI meiki <tei / harmony.co.jp> writes: :ruby で、32bit整数のシフト計算をしようとしたら、こんなふう :になってしまったのですが、これはなぜでしょう? バグです. :それから、リッファレンスマニュアルの Fixnum クラスの説明に : :> マシンのポインタのサイズに収まる長さの固定長整数.ほと :> んどの マシンでは31ビット幅です.演算の結果がFixnumの :> 範囲を越えた時には自動的に Bignumに拡張されます. : :とあるのは、32bit幅の間違いでしょうか? 64 ビットマシンでも動くようになったから sizeof (INT) * 8 - 1 ビット幅 が正解かもしれない. 1 ビットは Fixnum かどうかのフラグに使わ れてます. ruby.h や README.EXT.jp などを参照. -- わたなべひろふみ
--- numeric.c.orig Fri Jan 16 21:35:46 1998 +++ numeric.c Tue Feb 3 10:00:18 1998 @@ -826,3 +826,3 @@ i = NUM2INT(y); - if (y < 32) { + if (i < sizeof (INT) * 8) { val = RSHIFT(FIX2INT(x), i);