はじめまして小塚と申します。一応、半年程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"

宜しくお願いします。