【问题标题】:Parse Error in C [closed]C中的解析错误[关闭]
【发布时间】:2012-04-26 09:58:34
【问题描述】:

我正在做一些按位运算作业,它说我的代码有一个“解析错误” 我假设它的语法或其他东西......但我找不到丢失的分号或任何东西。 你能找出我可能遇到问题的原因吗?

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);
}

【问题讨论】:

  • 请发布完整的错误信息。
  • 确切的错误信息是什么,包括行号?
  • bits.c:294:解析错误。第 294 行是发布的倒数第二行。我在 Unix 中工作,所以它没有给我太多细节
  • 那么,294 是哪一行?
  • 您可以更有效地做很多事情,但您对这篇文章有一个真正的问题:equal &amp; 0。它永远为零。

标签: c parsing syntax


【解决方案1】:

一定有什么可疑的事情发生。也许您的编辑器将&lt;&lt;&gt;&gt; 与某个unicode 字符«» 发生冲突。

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

【讨论】:

    【解决方案2】:

    所以,我写了一小段代码——它似乎和你做的一模一样……我不知道这是否有帮助,但它告诉你哪个更大,而不是它们是否'虽然重新平等。不确定它是否有助于缩短代码。

    #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;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-03-04
      • 2011-10-01
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 2012-06-19
      • 2016-05-22
      • 2010-11-18
      相关资源
      最近更新 更多