如何使用补码表示法计算负数减负数?含反码运算相关疑问
二进制反码/补码减法运算规则梳理
核心前提(解决90%混淆的根本)
所有二进制串的数值解读、运算规则,都必须先约定两个固定前提,不存在脱离前提的模糊解读:
- 运算采用的位宽:比如4位、8位、16位,只有当前位宽下的最左侧位,才有可能是符号位
- 运算采用的编码规则:无符号数、原码、反码(One's Complement)、补码(Two's Complement)
只要约定为有符号数编码(原/反/补码),当前位宽的最高位就是符号位,0代表正、1代表负;只要约定为无符号数编码,所有位都是普通数值位,没有符号位。约定完成后每个二进制串对应的真值是唯一的,不存在随机切换解读的可能。
问题1:0101 - 1100的解读规则
以最常见的4位位宽场景为例,两种约定下的解读完全固定:
- 若约定为4位无符号数运算:没有符号位,
0101对应真值5,1100对应权值计算结果12,式子永远解读为5 - 12。4位无符号数表示范围是0~15,该运算结果为-7,超出表示范围,硬件会按模16得到结果1001(即无符号数9)。 - 若约定为4位有符号补码运算:最高位为符号位,
0101是正数+5,1100是负数-4,式子解读为5 - (-4)。4位补码表示范围是-8~+7,结果9超出正向上限,会产生正溢出,得到无效结果1001(对应补码-7),需要将位宽拓宽到5位及以上才能得到正确结果9。 - 若约定为4位有符号反码运算:
1100对应负数-3,式子解读为5 - (-3),结果8超出4位反码-7~+7的表示范围,同样会溢出,需拓宽位宽计算。
问题2:用反码计算0101 - 1100的方法
反码完全可以实现减法运算,核心运算规则只有一条:所有减法统一转换为加法,即A - B = A的反码 + (-B)的反码,符号位和数值位一起参与运算;如果相加后最高位产生了进位,要把这个进位加到结果的最低位(即循环进位规则)。
不存在计算时临时选择解读方式的说法,你在运算前约定好编码规则,按规则转换真值计算即可:
- 如果你要计算的是无符号场景下的
5 - 12:
4位反码的表示范围只有-7~+7,无法容纳-12,需要将位宽拓宽到5位:- +5的5位反码为
00101,-12的5位反码为10011(符号位为1,数值位为12的原码按位取反) - 两数相加:
00101 + 10011 = 11000,最高位无进位,不需要处理循环进位 - 结果最高位为1,是负数,数值位按位取反得到绝对值7,最终结果为-7,和数学计算一致。
- +5的5位反码为
- 如果你约定是4位有符号反码场景,即计算
5 - (-3):
4位反码无法容纳结果8,同样拓宽到5位计算:- +5的5位反码为
00101,+3的5位反码为00011 - 两数相加:
00101 + 00011 = 01000,最高位无进位,结果为+8,计算正确。
- +5的5位反码为
问题3:被减数为负数的减法计算(以-5 -7为例)
反码计算流程
反码运算不需要死记“对哪个数取反”,只要按照“减法转加法、所有数转反码、相加、处理循环进位”的流程走即可,以5位位宽(可覆盖-16~+15范围,足够容纳结果-12)为例:
- 把算式转成加法形式:
-5 - 7 = -5 + (-7) - 将两个加数都转成5位反码:
- -5的原码为
10101,反码保留符号位、数值位取反,得到11010 - -7的原码为
10111,反码为11000
- -5的原码为
- 两数相加:
11010 + 11000 = 110010,注意5位运算下相加得到了6位结果,最高位的1就是进位 - 按循环进位规则,把进位的1加到低5位结果的最低位:低5位是
10010,加1后得到10011 - 结果最高位为1是负数,数值位取反得到绝对值12,最终结果为-12,计算正确。
补码计算流程
补码运算逻辑和反码类似,差异只有两点:一是负数的补码是反码加1,二是最高位产生的进位直接丢弃,不需要处理循环进位。同样用5位位宽计算:
- 算式转加法:
-5 + (-7) - 转5位补码:
- -5的反码是
11010,补码加1得到11011 - -7的反码是
11000,补码加1得到11001
- -5的反码是
- 两数相加:
11011 + 11001 = 110100 - 直接丢弃最高位产生的进位1,取低5位得到
10100 - 验证结果:
10100最高位为1是负数,取反加1得到绝对值12,对应真值-12,计算正确。
易混点总结
- 永远不要在没有指定位宽和编码规则的前提下,判断一个二进制串是正还是负、值是多少
- 反码和补码的减法都不需要特殊记忆“谁取补”,只要把所有减法转成“加负数”,再把数转成对应编码直接相加即可
- 反码必须处理循环进位,补码直接丢弃进位,这是两者运算流程的核心差异
内容的提问来源于stack exchange,提问作者newbie1kenobi
相关产品推荐
相关产品推荐

