1 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
这道题考的就是 运算符优先级、整型的布尔值表示、&& 运算符的“短路”特性。
(k == a > b) && (t = a != b) 这个大复合表达式基础的部分其实是 && 运算符。
你看我之前说 C 标准没有规定很多运算符的操作数的求值顺序,但逻辑运算符 && || 就是例外。其左侧操作数肯定会先求值,如果这个值已经可以判断出逻辑表达式的结果了,就不会再求右侧操作数的值了——这就是所谓“短路”特性。
顺便说下,逻辑运算符左侧操作数求值之后是个序列点,当然此题不涉及这个知识点。
这题左侧操作数中 a > b 的结果是 false,布尔值 false 在和整型作比较时会隐式转型为整形值 0。k 不等于 0,所以左侧操作数的结果是 false。 既然 && 的左侧操作数是 false,那么整个 && 表达式肯定也是 false 了,这样就没有必要再判断右操作数了——这就是“短路”,所以右操作数根本就不会被求值(也就是根本就不会被执行)。
t 的值不会改变,这时你也没有必要去分析右侧的结果了。
- 1 回答
- 0 关注
- 1071 浏览
添加回答
举报
0/150
提交
取消