From: ISAMU KOZUKA Date: 2002-02-21T20:44:41+09:00 Subject: [ruby-list:34003] Bignum と負の Fixnum の bit 和について はじめまして小塚と申します。一応、半年程Rubyを勉強している つもりなのですが、ちょっと壁にブチあたったので皆様の御知恵を 貸して頂けると幸いです。 以下に問題を単純化したテストプログラムを示します。 v = 1 1.upto(32) do |x| printf ("%2d: %08X (%s), %b\n", x, v, v.type, (v | -1)) v = (v << 1) | 1 end このプログラムを実行すると (...前半略...) 29: 1FFFFFFF (Fixnum), ..1 30: 3FFFFFFF (Fixnum), ..1 31: 7FFFFFFF (Bignum), ..1011111111111111111111111111111111 32: FFFFFFFF (Bignum), ..1011111111111111111111111111111111 という具合に bit和の片方が Bignum と もう片方が負のFixnum の時 bit和をとるとチョット変な答え(bit32が0)になってしまいます。 これは、いったい何処に問題が有るのでしょうか? * テスト環境 その1 OS : Kondara MNU/Linux 2.0 CPU : Intel セレロン 800MHz Ruby: ruby -v → "ruby 1.6.4 (2001-06-04) [i586-linux]" rpm -q ruby → "ruby-1.6.4-2k" * テスト環境 その2 OS : Kondara MNU/Linux 2.1 RC2 CPU : AMD アスロン 850MHz Ruby: ruby -v → "ruby 1.6.5 (2001-09-19) [i586-linux]" rpm -q ruby → "ruby-1.6.5-12k" 宜しくお願いします。