-1

私はいくつかのビット単位の操作の宿題をやっていますが、コードに「解析エラー」があると表示されます。構文または何かを想定しています...しかし、欠落しているセミコロンなどを見つけることができません。問題が発生している理由を見つけていただけますか?

int isGreater(int x, int y)
{
      int xSign = (x>>31);
      int ySign = (y>>31);
      int check1 = (xSign & ySign) | (~xSign & ~ySign);
      int same = ( x + ((~y) + 1) )>>31;
      same = !(same & 0x1);
      int check2 = (check1 & same) | (~check1 & !xSign);
      int equal = (!(x ^ y))<<31>>31;
      return (equal & 0) | (~equal & check2);
}
4

2 に答える 2

1

何か怪しいことが起こっているに違いない。おそらく、エディタが<<または>>を何らかの Unicode 文字«またはと衝突させた可能性があります»

または、あなたが書いている逆、< <または> >どこかにスペースを入れています。解析では、1 つの代わりに<and などの2 つの異なるトークンが検出されます。<<<

于 2012-04-14T06:52:20.807 に答える
0

だから、私はこの小さなコードを書きました - それはあなたのものとまったく同じことをしているようです...これが役立つかどうかはわかりませんが、それらが等しいかどうかではなく、どちらが大きいかがわかります. コードを短くする以外に役立つかどうかはわかりません。

#include <stdio.h>

int isGreater(int x, int y)
{
   return (y + (~x +1)) >> 31 & 1;
}

int main(void)
{
    int x = 1;
    int y = 2;
    int greater = isGreater(x,y);
    if(greater == 1) {
        printf("%i > %i \n", x, y);
    } else {
        printf("%i < %i \n", x, y);
    }
    return 0;
}
于 2012-04-14T06:30:42.433 に答える