显示页面讨论过去修订反向链接回到顶部 本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。 ====== 第二章 数据的表示和运算 ====== ===== 2.1 数制与编码 ===== ==== 2.1.1 进位计数制 ==== 考点1:进制 |进制|数码|基数|位权| |二进制|0,1|2|$2^k$| |八进制|0,1,3,4,5,6,7|8|$8^k$| |十进制|0,1,3,4,5,6,7,8,9|10|$10^k$| |十六进制|0,1,3,4,5,6,7,8,9,A,B,C,D,E,F|16|$16^k$| 考点2:进制的转换 |转换|技巧|例题| |其他进制 → 十进制|按权展开|$(1011.01)_2$、$(735)_8$、$(2A3)_{16}$ 转十进制| |十进制 → 其他进制|整数部分除基取余倒序,小数部分乘基取整正序|$(13.6875)_{10}$ 转二进制、$(156)_{10}$ 转八进制、$(254)_{10}$ 转十六进制| |二进制 → 八进制|整数部分从右向左每三位一组,小数部分从左向右每三位一组|$(1011010.1101)_2$ 转八进制| |八进制 → 二进制|每位数字展开成三位二进制|$(275)_8$ 转二进制| |二进制 → 十六进制|整数部分从右向左每四位一组,小数部分从左向右每四位一组|$(11010110)_2$ 转十六进制| |十六进制 → 二进制|每位数字展开成四位二进制|$(3F)_{16}$ 转二进制| |八进制 ↔ 十六进制|先转二进制,再转目标进制|$(17)_8$ 转十六进制| [[计算机组成与体系结构:数据的表示和运算:考点2例题答案]] ==== 2.1.2 真值与机器数 ==== **真值**:用正负号表示的数,如+1011、-1101 **机器数**:包含符号位和数值位两部分。符号位通常放在最高位(最左边),0表示正数,1表示负数。 一般含符号位一共8位表示一个字符,扩展知识点:[[计算机组成与体系结构:数据的表示和运算:ascii]] ==== 2.1.3 原码、反码、补码、移码 ==== |码制|运算规则|正数例子(+5)|负数例子(-5)|+0|-0|0-0| |原码|符号位0正1负,数值部分不变;符号位参与运算|00000101|10000101|00000000|10000000|10000000| |反码|正数同原码;负数符号位不变,其余位按位取反|00000101|11111010|00000000|11111111|11111111| |补码|正数同原码;负数 = 反码 + 1;符号位参与运算|00000101|11111011|00000000|00000000|00000000| |移码|补码符号位取反(常用于表示浮点阶码)|10000101|01111011|10000000|10000000|10000000| <编辑定位> ===== 2.2 定点数的运算 ===== ==== 2.2.1 定点数的加法与减法 ==== 补码加减法是计算机中最基本的运算。 **补码加法公式:** [X + Y]补 = [X]补 + [Y]补 (mod 2^(n+1)) **补码减法公式:** [X - Y]补 = [X]补 + [-Y]补 = [X]补 - [Y]补 (mod 2^(n+1)) **溢出判断:** 当运算结果超出表示范围时发生溢出。判断溢出的方法: 1. **单符号位法**: - 正加正得负,或负加负得正,则溢出 - 即:符号位的进位 ⊕ 最高数值位的进位 = 1 时溢出 2. **双符号位法(变形补码)**: - 使用两位符号位,00表示正,11表示负 - 结果符号位为01表示正溢出,为10表示负溢出 3. **数值比较法**: - 两个同号数相加,若结果的符号与操作数不同,则溢出 **例题:** 设机器字长为8位(含1位符号位),X = +0.1011,Y = -0.0101,求X+Y和X-Y。 解: [X]原 = 0.1011000,[X]补 = 0.1011000 [Y]原 = 1.0101000,[Y]补 = 1.1011000 [-Y]补 = 0.0101000 X + Y: 0.1011000 + 1.1011000 ----------- 10.0110000(舍弃进位) = 0.0110000 X - Y: 0.1011000 + 0.0101000 ----------- 0.1110000 结果:X + Y = +0.0110,X - Y = +0.1110 ==== 2.2.2 定点数的乘法运算 ==== **原码一位乘法** 原码乘法的符号和数值部分分开运算: - 符号位:两数符号位异或 - 数值部分:绝对值相乘 算法步骤: 1. 被乘数取绝对值,乘数取绝对值 2. 根据乘数的末位决定是否加被乘数 3. 部分积和乘数一起右移一位 4. 重复n次(n为数值位数) **补码一位乘法(Booth算法)** Booth算法可以直接处理补码表示的数,不需要取绝对值。 算法规则(根据乘数的末两位判断): - 00或11:部分积右移一位 - 01:部分积加被乘数后右移一位 - 10:部分积减被乘数后右移一位 Booth算法的优点: - 统一了原码和补码的乘法运算 - 可以处理任意符号的数 - 对连续的0或1有加速效果 ==== 2.2.3 定点数的除法运算 ==== **原码恢复余数法** 除法运算需要比较被除数(余数)和除数的大小,如果够减则商1,不够减则商0并恢复余数。 算法步骤: 1. 符号位单独处理(异或) 2. 被除数和除数取绝对值 3. 被除数减去除数,若余数为正则商1,否则商0并恢复余数 4. 余数左移一位,重复上述过程 **原码不恢复余数法(加减交替法)** 恢复余数法需要回退,效率较低。不恢复余数法改进了这一过程: - 当余数为负时,不恢复余数,而是继续左移并加上除数 - 当余数为正时,左移后减去除数 **补码除法** 补码除法需要考虑被除数和除数的符号,判断"够减"的条件更复杂。常用方法有: - 补码交替除法 - 阵列除法器 ===== 2.3 浮点数的表示与运算 ===== ==== 2.3.1 浮点数的表示格式 ==== 浮点数用于表示范围很大的数,采用科学计数法的形式:N = M × R^E 其中: - M为尾数(mantissa),表示数的有效数字 - E为阶码(exponent),表示小数点的位置 - R为基数,通常为2 **IEEE 754标准格式** IEEE 754是浮点数表示的国际标准,规定了单精度和双精度两种格式: **单精度(32位)**: - 符号位S:1位,0为正,1为负 - 阶码E:8位,移码表示,偏移量为127 - 尾数M:23位,隐含最高位1(规格化数) **双精度(64位)**: - 符号位S:1位 - 阶码E:11位,偏移量为1023 - 尾数M:52位 数值计算公式: - 规格化数:(-1)^S × 1.M × 2^(E-偏移量) - 非规格化数:(-1)^S × 0.M × 2^(1-偏移量) **特殊值的表示**: | 阶码 | 尾数 | 含义 | |------|------|------| | 全0 | 全0 | ±0 | | 全0 | 非0 | 非规格化数 | | 全1 | 全0 | ±∞ | | 全1 | 非0 | NaN(非数) | ==== 2.3.2 浮点数的规格化 ==== **规格化的目的** - 保证表示的唯一性 - 提高精度(充分利用尾数的位数) **规格化形式** 对于二进制浮点数,规格化要求尾数的最高位为1(非规格化数除外)。 规格化判断: - 原码:符号位后第一位必须是1 - 补码:符号位与第一位必须不同(对于正数第一位为1,负数第一位为0) **规格化操作** 左规:当尾数过小(非规格化)时,尾数左移,阶码减小 右规:当尾数溢出时,尾数右移,阶码增大 ==== 2.3.3 浮点数的运算 ==== **浮点数加减法步骤**: 1. **对阶**:使两个数的阶码相同,小阶向大阶看齐 - 计算阶差ΔE = E₁ - E₂ - 若ΔE > 0,则M₂右移ΔE位,E₂ = E₁ - 若ΔE < 0,则M₁右移|ΔE|位,E₁ = E₂ 2. **尾数运算**:对阶后的尾数进行加减运算 3. **规格化**:运算结果可能非规格化,需要进行规格化处理 - 左规:尾数左移,阶码减1(直到规格化) - 右规:尾数右移,阶码加1(当尾数溢出时) 4. **舍入**:尾数右移时可能丢失低位,需要按一定规则舍入 - 截断法:直接丢弃多余位 - 舍入法:0舍1入 - 恒置1法:最低位置1 5. **溢出判断**:阶码是否超出表示范围 - 阶码上溢:结果太大,产生溢出错误 - 阶码下溢:结果太小,当作0处理 **浮点数乘除法** 乘法: - 阶码相加 - 尾数相乘 - 结果规格化和舍入 除法: - 阶码相减 - 尾数相除 - 结果规格化和舍入 ===== 2.4 算术逻辑单元(ALU) ===== ==== 2.4.1 ALU的功能与结构 ==== 算术逻辑单元(ALU)是运算器的核心部件,负责执行算术运算和逻辑运算。 **ALU的功能**: - 算术运算:加法、减法、乘法、除法 - 逻辑运算:与、或、非、异或 - 移位运算:算术移位、逻辑移位、循环移位 - 比较运算:等于、大于、小于等 **ALU的结构**: ALU主要由以下部分组成: - 加法器:核心运算部件,用于实现加减法 - 逻辑运算电路:与门、或门、非门等 - 移位器:实现各种移位操作 - 标志寄存器:保存运算结果的状态信息 ==== 2.4.2 加法器电路 ==== **半加器** 半加器实现两个一位二进制数的加法,不考虑低位进位。 真值表: | A | B | 和S | 进位C | |---|---|-----|-------| | 0 | 0 | 0 | 0 | | 0 | 1 | 1 | 0 | | 1 | 0 | 1 | 0 | | 1 | 1 | 0 | 1 | 逻辑表达式:S = A⊕B,C = AB **全加器** 全加器实现两个一位二进制数加上低位进位的加法。 逻辑表达式: S = A⊕B⊕Cᵢₙ Cₒᵤₜ = AB + (A⊕B)Cᵢₙ **串行加法器** 使用一个全加器,逐位进行加法运算。速度慢,但硬件成本低。 **并行加法器(行波进位加法器)** 使用多个全加器并联,同时计算各位的和,但进位串行传递。 延迟时间:t = n × t_FA(n为位数,t_FA为全加器延迟) **先行进位加法器(CLA)** 通过逻辑电路提前计算进位,避免进位逐级传递。 进位生成信号:Gᵢ = AᵢBᵢ 进位传播信号:Pᵢ = Aᵢ⊕Bᵢ 进位公式:Cᵢ₊₁ = Gᵢ + PᵢCᵢ 通过展开递归,可以实现各级进位的并行计算,大大提高运算速度。 ==== 2.4.3 运算器的组成 ==== **定点运算器的基本结构**: 1. **算术逻辑单元(ALU)**:执行运算 2. **通用寄存器组**:暂存操作数和运算结果 3. **状态寄存器(PSW)**:记录运算结果的状态 - ZF(零标志):结果为0 - SF(符号标志):结果为负 - CF(进位/借位标志):无符号运算溢出 - OF(溢出标志):有符号运算溢出 - PF(奇偶标志):结果的奇偶性 - AF(辅助进位标志):半字节进位 4. **数据总线**:传输数据 5. **移位器**:实现移位操作 **运算器的工作过程**: 1. 从寄存器或存储器取操作数 2. ALU执行运算 3. 结果送回寄存器或存储器 4. 设置状态标志 ===== 2.5 例题分析 ===== **例题1**:将十进制数-58表示为8位二进制的原码、反码、补码和移码。 解: 58的二进制表示:00111010 原码:1 0111010 = 10111010 反码:1 1000101 = 11000101 补码:1 1000110 = 11000110 移码:0 1000110 = 01000110(补码符号位取反) **例题2**:设X = 0.1101,Y = -0.1011,用补码计算X + Y和X - Y。 解: [X]补 = 00.1101(使用双符号位) [Y]补 = 11.0101 [-Y]补 = 00.1011 X + Y: 00.1101 + 11.0101 --------- 100.0010(舍弃进位)= 00.0010 结果:+0.0010 X - Y: 00.1101 + 00.1011 --------- 01.1000(符号位01,正溢出) **例题3**:将十进制数-12.75转换为IEEE 754单精度浮点数格式。 解: -12.75 = -1100.11₂ = -1.10011 × 2³ 符号位S = 1(负数) 阶码E = 127 + 3 = 130 = 10000010₂ 尾数M = 10011000000000000000000(23位) IEEE 754表示:1 10000010 10011000000000000000000 十六进制表示:C14C0000H **例题4**:已知浮点数X = 2^(-011) × 0.101100,Y = 2^(-010) × 0.111100,求X + Y。 解: 对阶:X的阶码-3,Y的阶码-2,X向Y对阶 X = 2^(-010) × 0.010110 尾数相加: 00.010110 + 00.111100 ----------- 01.010010 右规:尾数右移一位,阶码加1 X + Y = 2^(-001) × 0.101001 ===== 2.6 本章重点总结 ===== **核心概念:** - 各种数制之间的转换方法 - 原码、反码、补码、移码的定义和转换 - 定点数和浮点数的表示 - IEEE 754浮点数标准 **关键知识点:** 1. 进制转换:二进制、八进制、十六进制、十进制之间的转换 2. 码制转换:原码、反码、补码、移码之间的转换关系 3. 补码运算:补码加减法、溢出判断方法 4. 浮点数运算:对阶、尾数运算、规格化、舍入、溢出判断 5. ALU结构:加法器电路、标志位含义 **重要公式:** - [X]补 + [Y]补 = [X+Y]补 (mod 2^(n+1)) - [X-Y]补 = [X]补 + [-Y]补 - IEEE 754:(-1)^S × 1.M × 2^(E-127) **学习要点:** - 熟练掌握各种码制之间的转换 - 理解补码的优势(统一加减法、唯一零表示) - 掌握浮点数运算的完整流程 - 了解ALU的基本结构和工作原理 **思考题:** 1. 为什么计算机中普遍采用补码表示有符号数? 2. 浮点数加减法为什么要对阶?对阶的原则是什么? 3. 先行进位加法器为什么比行波进位加法器快? 4. IEEE 754标准中为什么要引入非规格化数? 登录 Detach Close 该主题尚不存在 您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。 计算机组成与体系结构/数据的表示和运算.txt 最后更改: 2026/03/03 23:54由 张叶安 登录