-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

一定有什么可疑的事情发生。也许您的编辑器将<<or>>与某些 unicode 字符«».

或者你正在写的相反< <> >在某处有空格。然后解析会看到两个不同的标记,例如<<而不是一个<<

于 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 回答