【问题标题】:Expression using ternary operator使用三元运算符的表达式
【发布时间】:2017-06-13 06:33:21
【问题描述】:
a+=b>=300?b=100:a==100;

如果ab分别初始化为100200, 执行三元运算符后ab的值是多少?

答案是a=101b=200

这怎么可能?

【问题讨论】:

  • 这是作业吗?只是好奇。
  • 可能是作业,但问题不在于结果,而在于要求解释。

标签: c ternary-operator


【解决方案1】:

只需添加一些括号和空格以使其更具可读性,并且应该很明显:

a += ((b >= 300) ? (b = 100) : (a == 100));

(请参阅C operator precedence table,了解为什么括号可以放在上述表达式中的位置。)

所以这基本上只是:

a += 1;

【讨论】:

    【解决方案2】:

    条件运算符与它无关,基本上它只是在这里增加了混乱。你的程序相当于a += a==100。这给出了a += 1,因为 == 的结果是布尔值 1=true。

    【讨论】:

      【解决方案3】:

      先加一些空格,让这个语句表达式更容易直观解析:

      a += b >= 300 ? b = 100 : a == 100;
      

      然后根据 C 语法(在这种特殊情况下与 java 或 javascript 语法略有不同)进行解析:

      a +=
            (b >= 300) ?
                 b = 100 :
                 a == 100
            ;
      

      由于b = 200,测试b >= 300 评估为false,并且三元运算符的第一个分支评估,但第二个分支是并且a == 100 评估为1 a 确实等于 100。三元运算符1 的结果被添加到a,因此a 的新值是101b 不变。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-13
        • 2022-01-21
        • 2019-02-10
        • 2010-12-21
        • 2012-09-02
        • 2012-07-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多