使用三元运算符表达式

时间:2017-06-13 06:33:21

标签: c ternary-operator

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

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

答案是a=101b=200

这怎么可能?

3 个答案:

答案 0 :(得分:3)

只需添加一些括号和空格以使其更具可读性,它应该是显而易见的:

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

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

所以这基本上只是:

a += 1;

答案 1 :(得分:1)

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

答案 2 :(得分:1)

首先添加一些空格以使这个语句表达式更容易在视觉上解析:

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未更改。