【自学嵌入式:计算机组成原理】26. 补码的计算方法

分类: 365bet有手机app吗 时间: 2026-06-23 21:40:44 作者: admin

26. 补码的计算方法

有符号数与无符号数

1. 核心区别:最高位的作用

计算机以二进制位存储整数,位数决定表示范围(如8位、16位)。区分“有符号数”与“无符号数”的关键是最高位是否为符号位:

无符号数:所有位均用于表示数值大小,无符号位。

以8位无符号数为例:范围是 \(0000\ 0000_2\) 到 \(1111\ 1111_2\)(即十进制 \(0\) 到 \(255\) ),共 \(2^8 = 256\) 个值。

有符号数:最高位为符号位(0表示正数,1表示负数),剩余位表示数值。计算机中,有符号数统一用补码存储(原因:简化加减法运算、避免正负0歧义)。

以8位有符号数为例:范围是 \(-128\) 到 \(127\)(补码规则决定,后续详解)。

2. 有符号数的补码规则

有符号数用补码存储,需掌握以下要点:

(1)正数的补码

正数的补码与原码(二进制本身)相同。

例如:十进制 +5(8位),原码与补码均为 \(0000\ 0101_2\)(最高位0表示正数,后7位表示数值)。

(2)负数的补码

负数的补码通过“原码(正数)按位取反 + 1”得到:

写出对应正数的二进制原码;

对所有位按位取反(0变1,1变0);

加1,结果即为负数的补码。

示例:求 -3 的8位补码

① 正数 +3 的原码:\(0000\ 0011_2\)

② 按位取反:\(1111\ 1100_2\)

③ 加1:\(1111\ 1100_2 + 0000\ 0001_2 = 1111\ 1101_2\)

因此,-3 的8位补码是 \(1111\ 1101_2\)。

(3)补码的优势:统一“0”的表示

无符号数或早期编码中,“0”可能有两种表示(如 +0 和 -0 ),导致歧义。补码通过规则让 +0 和 -0 统一:

+0 的补码:\(0000\ 0000_2\)

若按负数规则计算 -0:正数 0 取反为 \(1111\ 1111_2\),加1后溢出(\(1111\ 1111_2 + 1 = 1\ 0000\ 0000_2\)),截断8位后为 \(0000\ 0000_2\),与 +0 一致。

因此,补码下“0”仅有一种表示,简化了运算逻辑。

3. 表示范围对比(以8位为例)

类型

二进制范围

十进制范围

说明

无符号数

\(0000\ 0000_2 \sim 1111\ 1111_2\)

\(0 \sim 255\)

8位全表数值

有符号数

\(0000\ 0000_2 \sim 0111\ 1111_2\)(正数)\(1000\ 0000_2 \sim 1111\ 1111_2\)(负数)

\(-128 \sim 127\)

最高位为符号位,补码规则扩展负数范围

4. 混合使用的风险

若程序中混合有符号数与无符号数运算,会因“符号位是否参与数值计算”产生错误。例如:

无符号数 255(\(1111\ 1111_2\))与有符号数 -1(补码 \(1111\ 1111_2\))二进制相同,但数值逻辑不同。

运算时,计算机可能误将有符号数的符号位当作数值位(或反之),导致结果异常。

补码的运算应用:简化加减法

补码的核心价值是将减法转化为加法,统一计算机的运算逻辑(硬件只需实现加法器)。

示例:计算 5 - 3(等价于 5 + (-3) )

步骤1:将运算转化为“加法”

十进制:5 - 3 = 5 + (-3)

步骤2:写出对应数的8位补码

+5 的补码:\(0000\ 0101_2\)(正数补码与原码一致)

-3 的补码:按“取反+1”规则,得到 \(1111\ 1101_2\)(前文已计算)

步骤3:补码相加

二进制加法:

0000 0101 (+5 的补码)

1111 1101 (-3 的补码)

= 1 0000 0010 (进位 1,共 9 位)

步骤4:截断位数(保留8位)

因是8位运算,舍弃最高位进位,结果为 \(0000\ 0010_2\),对应十进制 2(正确结果:5-3=2)。

原理:补码如何让减法变加法

补码的设计利用了模运算(如8位的模是 \(2^8 = 256\) )。对负数而言,补码等价于“模减去其绝对值”:

例如,-3 的补码 \(1111\ 1101_2\) 对应十进制 253(\(2^8 - 3 = 253\) )。

因此,5 + (-3) 等价于 5 + 253 = 258,对256取模(\(258 \mod 256 = 2\) ),结果与十进制减法一致。

总结

有符号数与无符号数:核心区别是最高位是否为符号位,无符号数全表数值,有符号数用补码存储(最高位为符号位)。

补码规则:正数补码与原码一致,负数补码为“原码(正数)取反+1”,可避免正负0歧义。

运算优势:补码将减法转化为加法,简化硬件设计,运算时需注意位数截断与符号位处理。

实践风险:混合有符号数与无符号数运算易引发逻辑错误,需严格区分类型。

掌握补码与有符号数的规则,是理解计算机数值存储、运算逻辑的基础,后续学习数据类型、溢出问题时需深度结合这些概念。