From: EGUCHI Osamu Date: 1999-12-02T20:35:22+09:00 Subject: [ruby-dev:8503] Re: BIGDN えぐち@エスアンドイー です。 >>> In message [ruby-dev:8498] Re: BIGDN On Thu, 2 Dec 1999 18:48:22 +0900, toyofuku@juice.or.jp said: 豊福> 豊福です。HP-UX 10 で試してみました。 豊福> 豊福> やはり RSIFT(x,y) は ((x)>>(y)) になっていたので これは、 configure を実行した結果、出来た config.h が #define RSHIFT(x,y) ((x)>>y) という定義だった と言う意味ですね。(まづい!) # config.cache があったとか、そういう事ではないですね。 configure.in では、 int main() { if (-1==(-1>>1)) return 0; return 1; } のようにして、0が返るか否かをテストしてますが、 -1==(-1>>1)が、定数式同士の比較だと、hptu-10.x でも 一致してしまうのかも知れません。 configure にもうひと工夫必要? 豊福> おかしいと思い調べたところ 豊福> 豊福> 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 豊福> 豊福> となりました。 この場合の、x が符号なしあるいは、負でない場合の結果は 処理系依存だそうです。ですが、、 豊福> sizeof(short) が unsigned なの(?)で x も 豊福> unsigned に変換されたのかも。 、、式の右辺の符号の有無はどう考えても、関係ないように思えます。 (たしかに、sizeof(short).type は size_t で unsigned だけど) #「処理系に依存」しても動作は一貫してなきゃだめぢゃん!>hp もしかして、 int main() { if (-1==(-1>>(unsigned)1)) return 0; return 1; } こんな事??? #左から0が入って来る右シフトといい、unsigned な char といい #他との互換性を損なうためにしているとしか思えん。 ~\(@@)/~ えぐち