2.1 机器数表示
真值与机器数
真值是带有"+"或"−"符号的实际数值;机器数是数据在计算机中的二进制表示,符号位数字化(0 正 1 负)。四种常见机器数编码
设机器字长为 n+1 位(1 位符号位 + n 位数值位),真值 X:
| 编码 | 定义 | 正数 X=+25 | 负数 X=−25 | 特点 |
|---|---|---|---|---|
| 原码 | 符号位 + 绝对值 | 0 0011001 | 1 0011001 | 表示简单,0 有两种表示 |
| 反码 | 正数同原码;负数符号位不变数值位取反 | 0 0011001 | 1 1100110 | 过渡编码,0 有两种表示 |
| 补码 | 正数同原码;负数反码 + 1 | 0 0011001 | 1 1100111 | 0 唯一,加减统一 |
| 移码 | 补码符号位取反 | 1 0011001 | 0 1100111 | 用于阶码,便于比较大小 |
重要结论:正数的原码、反码、补码相同;负数补码 = 反码 + 1。补码的表示范围不对称:n+1 位补码范围为 −2ⁿ ~ 2ⁿ−1(多表示一个最小负数)。
补码的关键性质
- 补码的补码 = 原码:[[X]补]补 = [X]原。
- 补码算术右移:符号位保持不变,相当于除以 2(向下取整)。
- 补码的相反数:[−X]补 = [X]补 连同符号位取反加 1。
- 移码与补码:同一真值的移码与补码仅符号位不同。
2.2 定点数表示与运算
定点数是小数点位置固定的数,分为定点小数(小数点在符号位之后,范围 −1 ~ 1−2⁻ⁿ)和定点整数(小数点在末位之后)。
补码加减法
补码加减法统一为加法运算:[X±Y]补 = [X]补 + [±Y]补。其中 [−Y]补 由 [Y]补 连同符号位取反加 1 得到。
溢出判断:
- 单符号位法:参加运算两数符号相同,结果符号与之不同则溢出。
- 进位法:符号位进位与最高数值位进位不同则溢出。
- 变形补码(双符号位)法:双符号位 00 正、11 负为正常;01 正溢出、10 负溢出。
乘法与除法
| 算法 | 核心思想 | 乘数/余数处理 |
|---|---|---|
| 原码一位乘 | 符号位单独异或,绝对值相乘 | 乘数末位为1则加 |X|,右移 |
| 补码一位乘(Booth) | 根据乘数末两位判断加减 | 10 加 [−X]补,01 加 [X]补,算术右移 |
| 原码加减交替除 | 余数正减除数,余数负加除数 | 上商、左移 |
2.3 浮点数表示与运算
浮点数
形如 N = M × Rᴱ,其中 M 为尾数,E 为阶码,R 为基数(通常 R=2)。计算机中阶码用移码、尾数用补码或原码表示。IEEE 754 标准
| 格式 | 总位数 | 符号 S | 阶码 E(移码) | 尾数 M(隐含1) | 偏置值 |
|---|---|---|---|---|---|
| 短实数(单精度) | 32 | 1 位 | 8 位 | 23 位 | 127 |
| 长实数(双精度) | 64 | 1 位 | 11 位 | 52 位 | 1023 |
规格化数真值 = (−1)ˢ × 1.M × 2^(E−偏置)。尾数隐含最高位 1,节省 1 位存储。
浮点加减法步骤
- 对阶:小阶向大阶看齐,小阶尾数右移,每移一位阶码加 1,直至阶码相等。
- 尾数求和:按定点补码加减法完成尾数加减。
- 规格化:尾数不满足规格化时左规或右规。
- 舍入:对阶和右规时丢掉低位,需舍入处理(0 舍 1 入、就近舍入等)。
- 溢出判断:看阶码是否溢出(不是尾数)。
关键:浮点数溢出判断看阶码,而非尾数。尾数溢出可通过右规处理;只有阶码超出表示范围才是真正溢出。
2.4 ALU 与加法器
ALU (Arithmetic Logic Unit)
运算器的核心部件,由加法器、移位器、逻辑运算部件及多路选择器组成。加法器是 ALU 的核心。- 串行加法器:一位全加器串行进位,延迟高、面积小。
- 并行加法器(行波进位):各位同时相加,但进位逐位传递,速度仍受限。
- 先行进位加法器(CLA):通过进位生成函数 G 和进位传递函数 P 提前计算进位,大幅提高速度。
全加器逻辑:和 Sᵢ = Aᵢ ⊕ Bᵢ ⊕ Cᵢ₋₁;进位 Cᵢ = AᵢBᵢ + (Aᵢ⊕Bᵢ)Cᵢ₋₁。其中 Gᵢ = AᵢBᵢ 为进位生成,Pᵢ = Aᵢ⊕Bᵢ 为进位传递。
2.5 数据校验码
为发现/纠正传输与存储中的错误,常使用校验码:
- 奇偶校验:增加 1 位校验位使 1 的个数为奇/偶数,只能检测奇数位错。
- 海明码:分组奇偶校验,可发现双错、纠正单错。码距 ≥ 3。
- CRC 循环冗余校验:基于模 2 除法,检错能力强,广泛用于网络传输。