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);