条件运算符题目讲解

2019-11-21 12:19:44 浏览数 (2)

【单选题】设a=1,b=2,c=3,d=4,则表达式a<b?a:c<d?a:d的值是( )。

A 4

B 3

C 2

D 1

大家看到这个题目,会觉得这不是挺简单的,根据优先级(?: 优先级是13,仅高于赋值、逗号运算符),先比较大小,再进行条件运算。选D,是很简单,因为不管你算的对不对,都会得到答案1 。

我们把这段程序改一下,求表达式 1?9:1?8:4 的值是多少?你的答案是9还是8,这个和上面的就有所区别了。

我们执行下面代码看下结果

printf("%dn",1?9:1?8:4); 执行结果 9

不知道你的答案是不是对的。

不少同学认为 1?9:1?8:4 <=> (1?9:1)?8:4,所以得到结果8。

但实际上明显是 1?9:1?8:4 <=> 1?9:(1?8:4),所以正确运行结果是9。

上面选择题比较简单,不管理解对错,都很容易得到答案选D 1,但是不代表你真的懂。

需要注意的是条件运算符具有右结合性(同样结合方向是右向左的还有优先级为2的自增、自减运算、取值、取地址、逻辑非、sizeof等),不同于加减乘除、关系运算、逻辑运算等大部分结合方向是左到右。

类似题目:

w<x ? x w : x<y ? x : y

与 w<x ? x w : ( x<y ? x : y) 等价,与 (w<x ? x w : x<y) ? x : y 不等价

a>b ? c>d ? e : f : g 与a>b ? (c>d ? e : f) : g等价

0 人点赞