反码计算加减法:加法与减法结果都是正确的,只是解决不了 $-0$ 的问题
答案A。结合数组、位运算、进制等知识综合分析。
注意题目中的否定词("不正确""不属于")和绝对化表述("一定""必须")。
【考点】二进制表示|有符号数算术|进位绕回
《GESP 三级 大纲》“第 4 章 数据表示与运算”中“二进制有符号数编码”与“算术运算”两个子目。命题人放这道题,意在检验考生是否真正理解反码算术的原理,而非机械记忆“反码不能表示 -0"的结论——这是多数考生把“表示有问题”等同于“运算有错误”的典型认知偏差。
看到“反码”先定位到最高位符号位,加法按普通二进制加,末位进位绕回 MSB,减法先取反再按加法逻辑处理。关键观察是 反码存在 +0 与 -0 两种表示,导致 0 的运算结果不唯一。这一类题的通法:遇到“符号位参与运算”的题,先写出编码规则,再按位运算最后处理进位,不要一看到边界情况就否定整体方法。
A 选“正确”是因为反码加/减对所有非零数均得出正确数值,仅 0 有两种表示;B 选“错误”是考生被“解决不了 -0"的表述误导,误以为整体方法失效。命题人利用“局部缺陷→整体无效”的归因错误,以及“反码 -0 问题”在 C 语言中已被补码取代的常识差——这题考的是你对编码算术本质的理解,不是对编程语言现状的记忆。
若改成“补码计算”,则进位不再绕回,-0 消失但正数范围缩小;若要求“处理 -0 的特殊逻辑”,则需额外判断全 1 与全 0。刷到类似题先问自己“命题人想考我辨析哪两种编码的运算差异”。
综上,反码加减法在数值结果上正确,仅 0 的表示有歧义,故 A 正确。