整型变量 $x$ 的初始值为 $10$,以下代码的输出结果是( )
int t = x--;
t -= x;
cout << t << endl;答案C。数组和位运算的代码追踪要特别小心:数组下标从0开始,位运算结果可能不直观。建议画图辅助。
位运算追踪时建议把数字写成二进制形式再逐位计算。
【考点】一:后自减运算符 x--|二:赋值表达式 int t = x--|三:复合赋值 t -= x
命题人把这道题放在 GESP 三级“表达式与运算”模块,不是考语法,而是考你对后自减运算符的理解。绝大多数考生一看到 x-- 就下意识想"x 先减后赋值”,结果在 t = x-- 这步就错了——后自减返回的是x 的旧值,而前自减 --x 才返回新值。这个细节是命题人专门挖的坑,用来卡住只背结论、不做语义分析的同学。
【解题思维】按执行顺序拆解:int t = x--; 先把 x 的旧值 10 赋给 t,再执行 x 自减,此时 x 变为 9。第二步 t -= x; 等价于 t = t - x,即 10 - 9 = 1。输出 t 就是 1。这类题的通法是先写执行顺序,再逐行模拟:遇到 x-- 或 ++x 要分清返回的是旧值还是新值;遇到复合赋值要还原成普通赋值再算;遇到多步运算要按顺序一步步推,不能跳步。
【陷阱拆解】错误选项 A 和 B 都是把 t 算成 0 或 -1,是把 t -= x 看成了 t = x - t 或者把 x 当成了 9 却忘了 t 已经是 10 了。陷阱 1:混淆后自减和前自减,认为 x-- 返回新值——如果按这个错逻辑,t 会得到 9,再 t -= x 得到 9 - 8 = 1,碰巧答案还是 1,但过程全错,说明你根本没理解运算符语义。陷阱 2:以为 t -= x 会再减一次 x,实际上复合赋值只是普通减法。陷阱 3:忽略 x-- 的副作用发生在赋值之后,导致对 t 的计算出错。
【反命题思维】命题人如果把 x-- 换成 --x,t -= x 换成 t -= 0,答案就变成 10;如果把 t -= x 改成 t -= x--,答案会变成 0。刷到这类题先问自己:"这个运算符返回的是旧值还是新值?赋值之后的副作用是什么?” 别急着套公式,把每一步的变量状态写下来,就能一眼看穿命题人的套路。