豊福です。

[ruby-dev:8527] えぐちさん
> x の符号の有無や x の MSB が1の時の挙動はansi では実装依存なので、
> x を正に正規化しシフトする元のバージョンの実装は的確だと思います。

  (-1)>>1 == -1 のチェックによる効率化はすでに
入っているのですからついでにもうちょっとチェック
を増やしてもいいかなと。

  ところで、
> x の符号の有無や x の MSB が1の時の挙動はansi では実装依存なので、

  この「符号」って正負? signed,unsigned ?
それとも両方ともですか。
  signed だろうが unsigned だろうが MSB が 0 の
ときの右シフトは MSB に 0 が入ってくるというのだ
けはさすがに大丈夫なんですよね。

> x の MSB が1の時の挙動はansi では実装依存なので、

  とすると x が unsigned のときは
(((x)<0) ? ~((~(x))>>BITSPERDIG) : (x)>>BITSPERDIG)
もまずくないですか。必ず (x)>=0 なので。

(((long)(x)<0) ? ~((~(x))>>BITSPERDIG) : (x)>>BITSPERDIG)
ですか?
---
                        豊福
                        toyofuku / juice.or.jp