运算符优先级和三元运算符
我在C有问题
#include int main() { int a = 10, b = 0, c = 7; if (a ? b : c == 0) printf("1"); else if (c = c || a && b) printf("2"); return 0; }
这段代码打印2,但我认为?b:c返回b = 0和0 == 0返回1.你能解释一下代码吗?
您的条件写得不好。
在第一个if语句中:
if (a ? b : c == 0)
如果你把这些值,那就变成了
if(10 ? 0 : 7 == 0)
意味着,它将始终返回0。
这就是控制进入其他部分的原因,它变成了
else if (7 = 7 || 10 && 0)
既然你在这里使用了“=”运算符(c = c),它将永远为真,因此它会打印“2”。
现在您希望代码返回“1”,然后以这种方式更改您的if语句。
if( (a ? b:c) == 0){...}
因为“==”运算符的优先级高于三元运算符。
条件运算符( ?:
:)具有最低优先级之一。 特别是它低于==
。 你的陈述意味着:
if(a ? b : (c == 0)) { ... }
不是这个:
if((a ? b : c) == 0) { ... }