我一直被教导几乎从不在编程中使用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位。
关于这里发生了什么的任何想法?
答案 0 :(得分:18)
这实际上与goto无关。你有一个运营商优先问题。按位和(&)的优先级低于等式(==)。结果,你实际上在做if ((myInt>>22) & (7 == X))
。
要修复它,只需添加一些parens:if ((myInt>>22) & 7) == X)
。
答案 1 :(得分:2)
我看到}
让我觉得标签和相应的printf
是在函数外声明的。当然你不能这样做..无论如何他们必须在一个方法里面。
(这只是一个猜测,也因为我看到你有其他问题,因为其他答案陈述:)
答案 2 :(得分:2)
'=='运算符的优先级高于'&'在C / C ++中。
尝试使用if ( ((myInt>>22) & 7) == X)