goto line of code failing to execute
我一直被教导几乎永远不要在编程中使用goto语句。 但是,作为我最近的编程项目的一部分,我们必须这样做。 我有一个带有各种goto语句的if / else语句,并且goto语句无法执行。 我不知道为什么。 任何帮助,将不胜感激。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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\ "); goto end; b: printf("this never executes\ "); goto end; c: printf("nor does this\ "); goto end; end: //more code |
位移的简要说明:我们正在实现一个计算机处理器,需要查看25位操作码的前3位。 因此(myInt >> 22)&7隔离了操作码中的3位。
关于这里发生的事情有什么想法吗?
实际上,这与goto无关。 您遇到了运算符优先级问题。 按位与(&)的优先级低于等于(==)的优先级。 结果,您实际上正在执行
要解决此问题,只需添加一些括号:
在C / C ++中,'=='运算符的优先级高于'&'。
尝试使用
我看到
(这只是一个猜测,也是因为我看到您还有其他问题,如其他答案所述:)