5

我一直被教导在编程中几乎从不使用 goto 语句。但是,作为我最近的编程项目的一部分,我们必须这样做。我有一个带有各种 goto 语句的 if/else 语句,而 goto 语句无法执行。我不知道为什么。任何帮助,将不胜感激。

       int myInt = XXXXXXX;
       if((myInt>>22) & 7 == X)
          goto a;
       else if((myInt>>22) & 7 == Y)
          goto b;
       else if((myInt>>22) & 7 == Z)
          goto c;
a:
    printf("this always executes\n");
    goto end;
b:
    printf("this never executes\n");
    goto end;
c:
    printf("nor does this\n");
    goto end;
end:
    //more code

移位等的简要说明:我们正在实现一个计算机处理器,需要查看 25 位操作码的前 3 位。所以 (myInt >> 22) & 7 隔离了操作码中的 3 位。

关于这里发生了什么的任何想法?

4

3 回答 3

18

这实际上与goto无关。您遇到了运算符优先级问题。按位和 (&) 的优先级低于相等 (==)。结果,您实际上是在做if ((myInt>>22) & (7 == X)).

要修复它,只需添加一些括号:if ((myInt>>22) & 7) == X).

于 2010-10-22T20:18:04.773 回答
2

我看到这}让我认为标签和对应printf是在函数之外声明的。当然你不能那样做......无论如何它们都必须在一个方法中。

(这只是一个猜测,也是因为我看到你还有其他问题,正如其他答案所说:)

于 2010-10-22T20:16:33.687 回答
2

'==' 运算符的优先级高于 C/C++ 中的 '&'。

试试 if ( ((myInt>>22) & 7) == X)

于 2010-10-22T20:20:35.343 回答