快捷导航

为什么不是c呀

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员1

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


(k == a > b) && (t = a != b) 这个大复合表达式基础的部分其实是 && 运算符。
你看我之前说 C 标准没有规定很多运算符的操作数的求值顺序,但逻辑运算符 && || 就是例外。其左侧操作数肯定会先求值,如果这个值已经可以判断出逻辑表达式的结果了,就不会再求右侧操作数的值了——这就是所谓“短路”特性。
顺便说下,逻辑运算符左侧操作数求值之后是个序列点,当然此题不涉及这个知识点


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

使用道具 举报

可能感兴趣的问答

发新帖
  • 微信访问
  • 手机APP