为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不是c呀

为什么不是c呀

C
包小龙虾 2018-09-11 19:17:12
查看完整描述

1 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

这道题考的就是 运算符优先级、整型的布尔值表示、&& 运算符的“短路”特性。


(k == a > b) && (t = a != b)  这个大复合表达式基础的部分其实是 && 运算符。

你看我之前说 C 标准没有规定很多运算符的操作数的求值顺序,但逻辑运算符 && || 就是例外。其左侧操作数肯定会先求值,如果这个值已经可以判断出逻辑表达式的结果了,就不会再求右侧操作数的值了——这就是所谓“短路”特性。

顺便说下,逻辑运算符左侧操作数求值之后是个序列点,当然此题不涉及这个知识点


这题左侧操作数中 a > b 的结果是 false,布尔值 false 在和整型作比较时会隐式转型为整形值 0。k 不等于 0,所以左侧操作数的结果是 false。 既然 && 的左侧操作数是 false,那么整个 && 表达式肯定也是 false 了,这样就没有必要再判断右操作数了——这就是“短路”,所以右操作数根本就不会被求值(也就是根本就不会被执行)。

t 的值不会改变,这时你也没有必要去分析右侧的结果了。


查看完整回答
反对 回复 2018-09-12
  • 1 回答
  • 0 关注
  • 1071 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信