C 用三元算子表示

C 用三元算子表示,c,ternary-operator,C,Ternary Operator,如果a和b分别初始化为100和200, 执行三元运算符后,a和b的值是多少 答案是a=101,b=200 这是怎么可能的?只需添加一些括号和空格,使其更具可读性,这应该是显而易见的: a+=b>=300?b=100:a==100; (请参阅a以了解为什么可以将括号放置在上述表达式中的位置。) 所以这基本上就是: a += ((b >= 300) ? (b = 100) : (a == 100)); 条件运算符与此无关,基本上它只是在这里添加了混乱。您的程序相当于a+=a==100

如果
a
b
分别初始化为
100
200
, 执行三元运算符后,
a
b
的值是多少

答案是
a=101
b=200


这是怎么可能的?

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

a+=b>=300?b=100:a==100;
(请参阅a以了解为什么可以将括号放置在上述表达式中的位置。)

所以这基本上就是:

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

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

首先添加一些空格,使该语句表达式更易于直观地解析:

a += 1;
然后根据C语法(与本例中的java或javascript语法略有不同)对其进行解析:


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

这是家庭作业吗?只是好奇。可能是作业,但问题不是结果,而是要求解释。
a += b >= 300 ? b = 100 : a == 100;
a +=
      (b >= 300) ?
           b = 100 :
           a == 100
      ;