From: EGUCHI Osamu Date: 1998-06-19T21:17:31+09:00 Subject: [ruby-dev:2943] Re: RSHIFT() について えぐち です。 From: WATANABE Hirofumi Subject: [ruby-dev:2941] Re: RSHIFT() について Date: Fri, 19 Jun 1998 19:16:34 +0900 > わたなべです. > > Yukihiro Matsumoto writes: > > :| #if (-1==(((-1)<<1)&FIXNUM_FLAG)>>1) > :| # define RSHIFT(x,y) ((x)>>y) > :| #else > :| # define RSHIFT(x,y) (((x)<0) ? ~((~(x))>>y) : (x)>>y) > :| #endif > :| > :|は何の判断でしょうか? > : > :これは,>>演算子の挙動(符合をどうするか)はコンパイラ依存なの > :で検出しているわけです.本来はconfigureでやらないといけない > :のですが,とりあえず今までは動いていたので,そのままになって > :ました.対応します. > > わたしもこの検出は以前から疑問に思ってました. > FIXNUM_FLAG は 1 だから ((-1)<<1)&FIXNUM_FLAG は 0 か 1 しか > ありえないですよね? ということは >> 1 したら必ず 0 になるか > ら #if は常に偽だと思うんですけど. > ひょっとして |FIXNUM_FLAG なのかな? > > -- > わたなべひろふみ #if ((-1>>1) == -1) で済む種類の問題なのでしょうか? #なにか、もう少し深いもののように感じたのですが えぐち