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