理解二进制负数:符号-数值、补码与二补码
减法可转化为加法,将被减数视为负值;如 7 − 5 变为 7 + (−5)。
掌握正数二进制表示后,下一步是编码负数,使减法能复用加法流程。
十进制中负号前缀最高位(如 −5)。二进制硬件只有高/低两态,必须在位模式内编码符号。
此处无第三符号如“负号”。一种方案是保留一位表示数学符号:

用位表示除位权外的用途易混淆;如 1101₂ 若不将最高位视为符号,会被读作十三。
先决定容纳最大幅度所需总位宽,确保所有运算在该宽度内。
下例将范围限制在 −7(1111₂)至 +7(0111₂),视最高位为符号位,防止误读。
将 −5 编码为 1101₂ 说明符号-数值制,最高位指示符号而非数值,用位置纯度换实用性。
最高位指示符号;其余位保留标准位权(二的幂)。
补码
符号-数值制虽概念直观,却使二进制加法复杂化。如何用普通加法将 −5(1101₂)加到另一数?
定制加法算法违背初衷,等同于手工减法,失去计算优势。
替代方案——补码——允许负数用标准二进制加法相加,且自然符合位权。
此方案中最高位仍划分范围,但现在带负位权(如 −8)。例如 −5 编码如下:

右三位可表示0–7幅度,最左位代表0或−8,可表示从−7(1001₂ = −8+1=−7)到+7(0111₂ = 0+7=7)的整数。
正数不变,负数需补码运算。

右列负数是右三位加左位负八之和,故不遵循正数递增规律。
右三位须设定使加上负八位权得所需负总和。
二补码
右三位是正数对应的二补码。例如:

以第四位为负权位(−8),任意正数的二补码是加到−8上得该数负值所需的值。
计算二补码简单:全位取反(一补码)再加一。如求五(101₂)的二补码,先反得010₂,加一得011₂,即三位二补码下的−5。
若同时操作所有位(含最高位),生成二补码同理。如将 0101₂(五)转为负五:
全位反 → 1010₂;加一 → 1011₂,即四位二补码下的−5。
关键是负权位位置须在二补码转换前固定。若第八位为负权位(10000000₂),0000101₂ 的二补码为 1111011₂,即八位二补码下的−5。
因此八位系统中 +5 为 00000101₂,−5 为 11111011₂。
相关练习:
- 二进制数学练习题
工业技术