豊福です。HP-UX 10 で試してみました。

  やはり RSIFT(x,y) は ((x)>>(y)) になっていたので
おかしいと思い調べたところ

  main()
  {
    long x = -2;
    printf("%x\n", x>>16);
    printf("%x\n", x>>(sizeof(short)*8));
    printf("%x\n", x>>((int)(sizeof(short))*8));
  }

の結果が

  ffffffff
  ffff
  ffffffff

となりました。

  sizeof(short) が unsigned なの(?)で x も
unsigned に変換されたのかも。
---
                        豊福
                        toyofuku / juice.or.jp