a+=b>=300?b=100:a==100;
如果a
和b
分别初始化为100
和200
,
执行三元运算符后,a
和b
的值是什么?
答案是a=101
,b=200
。
这怎么可能?
答案 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
的新值为101
。 b
未更改。