なかだです。

At Sun, 2 Jul 2000 02:36:28 +0900,
Katsuyuki Komatsu <komatsu / sarion.co.jp> wrote:
> |1 >> 323232
> |	==> 1
> |
> |となるのは、バグ?
> 
> へえー、面白いな。
> 
> numeric.cのfix_rshift()と同等のテストをやってみると、
> 試した限りの32bitマシンは全滅で64bitマシンはOKでした。
> 
> 323232ってどこから出てくるんだろう?

  323232 % 32 == 0, 323232 % 64 == 32 だからでしょう。ワードサ
イズを越えるシフトをしたときの動作はたぶん CPU で違うと思います
が。


Index: numeric.c =================================================================== RCS file: /home/cvs/ruby/numeric.c,v retrieving revision 1.12 diff -u -2 -p -r1.12 numeric.c --- numeric.c 2000/06/12 07:48:20 1.12 +++ numeric.c 2000/07/02 00:13:18 @@ -1242,4 +1242,6 @@ fix_rshift(x, y) if (i < 0) return fix_lshift(x, INT2FIX(-i)); + if (i >= sizeof(VALUE)*CHAR_BIT) + return INT2FIX(0); val = RSHIFT(FIX2LONG(x), i); return INT2FIX(val);
-- そうだ 強気に ちょっと インチキに☆彡 中田 "Bugるくらいがちょうどいいかも;-)" 伸悦