豊福です。

[ruby-dev:8548] えぐちさん
> 大体、y の型(符合)が結果に影響を与えて良いとは ANSIC は
> 言っていないので、hpux-10.x はその点が非準拠に思えます。

  私もこれは処理系のバグの範衷のような気がします。
一昔前の K&R に「unsigned が入っている演算はもう一方も
unsigned にして云々」と書いてあったような気がするんです
がそれをシフト演算にも適用したのかなと思ってました。
最近の K&R をちらっと見たのですがそれらしい記述は見つ
かりませんでした。

> (x)<<(signed int)(y) だと、hpux では両方に SAR に相当する
> コードを生成してしまう気がします。(手元にないので未検証)

    ((unsigned)-1)>>((signed)1) != ((unsigned)-1)

になりはしないかという話ですよね。一応 HP-UX10 では
大丈夫のようです。
(signed は使うとエラーになる予約語になってました)

    main()
    {
      long x = -1;
      unsigned long ux = -1;

      printf("%x\n",  x>>((int)1));      /* ffffffff */
      printf("%x\n",  x>>((unsigned)1)); /* 7fffffff */
      printf("%x\n", ux>>((int)1));      /* ffffffff */
      printf("%x\n", ux>>((unsigned)1)); /* ffffffff */
    }
です。
---
                        豊福
                        toyofuku / juice.or.jp