意外的三元赋值
Unexpected Ternary Assignation
int var = (1 == 1) ? (5) : (10);
这输出 5
,这是正确的。
int var = 100 + (1 == 1) ? (5) : (10);
这再次输出 5
。为什么?
我知道我可以通过在整个三元语句周围添加大括号来解决问题,但这并不能解释加法会发生什么以及为什么它首先会这样。
在C中每个非零值都是“true”,这里100 + (1 == 1)
的值是101
,也是“true”,所以选择(5)
。由于 ?:
的优先级很低,括号应该是 ((1==1) ? 5 : 10)
才能达到您想要的效果。
原因是运算符优先级规则以及任何非零值测试为真。
100 + (1 == 1) ? (5) : (10)
等同于 (100 + (1 == 1)) ? (5) : (10)
即 (101 != 0) ? (5) : (10)
.
运算符 ?:
的优先级低于加法。
int var = (1 == 1) ? (5) : (10);
这输出 5
,这是正确的。
int var = 100 + (1 == 1) ? (5) : (10);
这再次输出 5
。为什么?
我知道我可以通过在整个三元语句周围添加大括号来解决问题,但这并不能解释加法会发生什么以及为什么它首先会这样。
在C中每个非零值都是“true”,这里100 + (1 == 1)
的值是101
,也是“true”,所以选择(5)
。由于 ?:
的优先级很低,括号应该是 ((1==1) ? 5 : 10)
才能达到您想要的效果。
原因是运算符优先级规则以及任何非零值测试为真。
100 + (1 == 1) ? (5) : (10)
等同于 (100 + (1 == 1)) ? (5) : (10)
即 (101 != 0) ? (5) : (10)
.
运算符 ?:
的优先级低于加法。