第3课_二进制的补码和反码表示法
热度🔥:26 免费课程
授课语音
二进制的补码和反码表示法
二进制表示法是计算机中表示数值的核心方式,尤其是在表示有符号整数时,常见的表示法有原码、反码和补码。其中,补码和反码是处理负数时最常用的两种方法。补码是现代计算机中普遍采用的方式,具有简化加法和减法运算的优点。
一、原码(Sign-Magnitude)表示法
在介绍补码和反码之前,首先了解一下原码表示法。原码是最简单的二进制表示方法,符号位使用最高位(最左边的一位)来表示符号,0表示正数,1表示负数,其余位表示数值大小。
- 正数的原码与其绝对值的二进制表示相同。
- 负数的原码最高位为1,其余位表示其绝对值的二进制表示。
例子:
- 8位的原码表示
- 正数
5
:00000101
(符号位0
表示正数,剩余部分表示数值5
) - 负数
-5
:10000101
(符号位1
表示负数,剩余部分表示数值5
)
- 正数
原码有一个问题:加减法运算比较复杂,因为对于负数的加法和减法需要分别处理符号和数值部分。
二、反码(Ones' Complement)表示法
反码表示法解决了原码中的一些问题。反码的表示方式是:
- 正数的反码与原码相同。
- 负数的反码是对其原码中的每一位进行取反,即符号位不变,其余位取反。
1. 反码表示法的规则
- 正数:反码和原码相同。
- 负数:将原码除符号位外的所有位取反,得到负数的反码。
例子:
- 8 位的反码表示
- 正数
5
:原码是00000101
,反码也是00000101
。 - 负数
-5
:- 原码:
10000101
- 反码:
11111010
(将原码中除符号位外的每一位取反)
- 原码:
- 正数
2. 反码运算
- 反码的加法仍然有进位问题。特别是在表示负数时,两个负数的加法容易产生溢出,因此计算不如补码方便。
三、补码(Two's Complement)表示法
补码是现代计算机中最常用的表示方法,它比原码和反码更具优越性。补码的计算方式是:
- 正数的补码与原码相同。
- 负数的补码是对其绝对值的二进制表示取反后,再加上
1
。
补码的优势在于,加法和减法运算可以统一处理,不用考虑符号位。
1. 补码表示法的规则
- 正数的补码与原码相同。
- 负数的补码为:
- 取该数的原码。
- 对原码取反。
- 在取反后的结果上加
1
。
例子:
- 8 位的补码表示
- 正数
5
:- 原码:
00000101
- 补码:
00000101
(与原码相同)
- 原码:
- 负数
-5
:- 原码:
10000101
- 反码:
11111010
(原码取反) - 补码:
11111011
(反码加1)
- 原码:
- 正数
2. 补码的加法与减法
- 加法:在补码中,正数与负数的加法可以直接进行,不需要考虑符号位。
- 减法:减法也可以通过将被减数的补码加到减数上来实现。
3. 补码的范围
- n 位补码可以表示的整数范围是:
-2^(n-1)
到2^(n-1) - 1
。- 例如,8 位补码的范围是:
-128
到127
。 - 16 位补码的范围是:
-32768
到32767
。
- 例如,8 位补码的范围是:
例子:
- 8 位补码
- 最大正数:
01111111
,表示127
- 最小负数:
10000000
,表示-128
- 最大负数:
11111111
,表示-1
- 最大正数:
四、补码、反码与原码的比较
特性 | 原码 | 反码 | 补码 |
---|---|---|---|
表示正数 | 与原码相同 | 与原码相同 | 与原码相同 |
表示负数 | 符号位为1,其他位为正数的原码 | 符号位为1,其他位为原码的反码 | 符号位为1,其他位为原码的反码+1 |
0的表示 | 正负零表示都存在 | 正负零表示都存在 | 只有一个零表示 (00000000 ) |
加法运算 | 需要特殊处理符号位和进位 | 需要处理进位和符号位 | 加法运算简单,无需处理符号位 |
减法运算 | 需要转换为加法(加负数) | 需要转换为加法(加负数) | 直接加上补码即可 |
溢出检测 | 需要检查符号位的溢出 | 需要检查符号位的溢出 | 溢出检测简单 |
五、总结
- 原码、反码、补码是三种常见的有符号数表示法。
- 补码是计算机中最常用的表示法,因为它简化了加法和减法的运算。
- 反码和原码在表示负数时需要特别处理符号位和进位,计算比较麻烦。
- 在现代计算机中,大多数运算,特别是加法和减法,都是使用补码来进行处理的。