鄭です。

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─┘