【问题标题】:Unexpected Ternary Assignation意外的三元赋值
【发布时间】:2015-08-15 23:41:22
【问题描述】:
int var = (1 == 1) ? (5) : (10);

这会输出5,这是正确的。

int var = 100 + (1 == 1) ? (5) : (10);

这再次输出5。为什么?


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

【问题讨论】:

  • Operator precedence table 的可能重复项
  • 这里有点复杂。如果不是涉及的条件,情况就不一样了。编辑:什么。

标签: c variables output addition ternary


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    100 + (1 == 1) ? (5) : (10) 等价于(100 + (1 == 1)) ? (5) : (10),即(101 != 0) ? (5) : (10)

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

    【讨论】:

      猜你喜欢
      • 2020-03-03
      • 2013-04-05
      • 2021-04-29
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2012-02-14
      相关资源
      最近更新 更多