C 意外三元赋值

C 意外三元赋值,c,variables,output,addition,ternary,C,Variables,Output,Addition,Ternary,这将输出正确的5 int var = (1 == 1) ? (5) : (10); 这将再次输出5。为什么? 我知道我可以通过在整个三元语句周围添加大括号来解决问题,但这并不能解释加法会发生什么,以及为什么它会这样做。在C中,每个非零值都是“true”,这里100+(1==1)的值是101,这也是“true”,因此(5)已选中。由于?:的优先级很低,括号应该是((1==1)?5:10),以达到您想要的效果。在C中,每个非零值都是“真”,这里100+(1==1)的值是101,这也是“真”,因此

这将输出正确的
5

int var = (1 == 1) ? (5) : (10);
这将再次输出
5
。为什么?



我知道我可以通过在整个三元语句周围添加大括号来解决问题,但这并不能解释加法会发生什么,以及为什么它会这样做。

在C中,每个非零值都是“true”,这里
100+(1==1)
的值是
101
,这也是“true”,因此
(5)
已选中。由于
?:
的优先级很低,括号应该是
((1==1)?5:10)
,以达到您想要的效果。

在C中,每个非零值都是“真”,这里
100+(1==1)
的值是
101
,这也是“真”,因此选择了
(5)
。由于
?:
具有非常低的优先级,因此括号应为
((1==1)?5:10)
,以达到您想要的效果。

原因是运算符优先级规则,并且任何非零值都测试为真

100+(1==1)?(5) :(10)
相当于
(100+(1==1))?(5) :(10)
(101!=0)?(5) :(10)


运算符
?:
的优先级低于加法。

原因是运算符优先级规则以及任何非零值测试为真

100+(1==1)?(5) :(10)
相当于
(100+(1==1))?(5) :(10)
(101!=0)?(5) :(10)


运算符
?:
的优先级比加法低。

这里可能有重复,但要复杂一些。如果不是这种情况,情况就不一样了。编辑:什么都有。可能是这里的复制品。它有点复杂。如果不是这种情况,情况就不一样了。编辑:不管怎样。
int var = 100 + (1 == 1) ? (5) : (10);