转到无法执行的代码行

fin*_*oop 5 c c++ goto

我一直被教导几乎从不在编程中使用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
Run Code Online (Sandbox Code Playgroud)

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

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

Soa*_*Box 18

这实际上与goto无关.你有一个运营商优先问题.按位和(&)的优先级低于等式(==).结果,你真的在​​做if ((myInt>>22) & (7 == X)).

要解决它,只需添加一些parens : if ((myInt>>22) & 7) == X).

  • 你的意思是**按位**和(&) (2认同)