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
;