鄭です。 ruby で、32bit整数のシフト計算をしようとしたら、こんなふうになってしまったのですが、 これはなぜでしょう? % ruby <<SCRIPT data = 0x12345 bits = 15 printf("\n0x%x >> %d = 0x%x\n\n", data,bits, data>>bits ) SCRIPT 0x12345 >> 15 = 0x2 % ruby <<SCRIPT data = 0x12345 bits = 16 printf("\n0x%x >> %d = 0x%x\n\n", data,bits, data>>bits ) SCRIPT 0x12345 >> 16 = 0x0 # 0x1 になるはずなのになぜ? % ruby <<SCRIPT data = 0x12345678 bits = 16 printf("\n0x%x >> %d = 0x%x\n\n", data,bits, data>>bits ) SCRIPT 0x12345678 >> 16 = 0x0 # 0x1234 になるはずなのになぜ? % ruby <<SCRIPT data = 0x123456789 bits = 16 printf("\n0x%x >> %d = 0x%x\n\n", data,bits, data>>bits ) SCRIPT 0x123456789 >> 16 = 0x12345 % それから、リッファレンスマニュアルの Fixnum クラスの説明に > マシンのポインタのサイズに収まる長さの固定長整数.ほとんどの マシンでは31ビット > 幅です.演算の結果がFixnumの 範囲を越えた時には自動的に Bignumに拡張されます. とあるのは、32bit幅の間違いでしょうか? ┌─鄭 明毅───────────────────┐ └──tei / harmony.co.jp──tei / mirage.linc.or.jp─┘