计算机组成与体系结构:数据的表示和运算

第二章 数据的表示和运算

考点1:进制

进制数码基数位权
二进制0,12$2^k$
八进制0,1,3,4,5,6,78$8^k$
十进制0,1,3,4,5,6,7,8,910$10^k$
十六进制0,1,3,4,5,6,7,8,9,A,B,C,D,E,F16$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例题答案

真值:用正负号表示的数,如+1011、-1101

机器数:包含符号位和数值位两部分。符号位通常放在最高位(最左边),0表示正数,1表示负数。

一般含符号位一共8位表示一个字符,扩展知识点:ascii

码制运算规则正数例子(+5)负数例子(-5)+0-00-0
原码符号位0正1负,数值部分不变;符号位参与运算0000010110000101000000001000000010000000
反码正数同原码;负数符号位不变,其余位按位取反0000010111111010000000001111111111111111
补码正数同原码;负数 = 反码 + 1;符号位参与运算0000010111111011000000000000000000000000
移码补码符号位取反(常用于表示浮点阶码)1000010101111011100000001000000010000000

<编辑定位>

补码加减法是计算机中最基本的运算。

补码加法公式: [X + Y]补 = [X]补 + [Y]补 (mod 2^(n+1))

补码减法公式: [X - Y]补 = [X]补 + [-Y]补 = [X]补 - [Y]补 (mod 2^(n+1))

溢出判断: 当运算结果超出表示范围时发生溢出。判断溢出的方法:

1. 单符号位法

  1. 正加正得负,或负加负得正,则溢出
  2. 即:符号位的进位 ⊕ 最高数值位的进位 = 1 时溢出

2. 双符号位法(变形补码)

  1. 使用两位符号位,00表示正,11表示负
  2. 结果符号位为01表示正溢出,为10表示负溢出

3. 数值比较法

  1. 两个同号数相加,若结果的符号与操作数不同,则溢出

例题: 设机器字长为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

原码一位乘法 原码乘法的符号和数值部分分开运算: - 符号位:两数符号位异或 - 数值部分:绝对值相乘

算法步骤: 1. 被乘数取绝对值,乘数取绝对值 2. 根据乘数的末位决定是否加被乘数 3. 部分积和乘数一起右移一位 4. 重复n次(n为数值位数)

补码一位乘法(Booth算法) Booth算法可以直接处理补码表示的数,不需要取绝对值。

算法规则(根据乘数的末两位判断): - 00或11:部分积右移一位 - 01:部分积加被乘数后右移一位 - 10:部分积减被乘数后右移一位

Booth算法的优点: - 统一了原码和补码的乘法运算 - 可以处理任意符号的数 - 对连续的0或1有加速效果

原码恢复余数法 除法运算需要比较被除数(余数)和除数的大小,如果够减则商1,不够减则商0并恢复余数。

算法步骤: 1. 符号位单独处理(异或) 2. 被除数和除数取绝对值 3. 被除数减去除数,若余数为正则商1,否则商0并恢复余数 4. 余数左移一位,重复上述过程

原码不恢复余数法(加减交替法) 恢复余数法需要回退,效率较低。不恢复余数法改进了这一过程: - 当余数为负时,不恢复余数,而是继续左移并加上除数 - 当余数为正时,左移后减去除数

补码除法 补码除法需要考虑被除数和除数的符号,判断“够减”的条件更复杂。常用方法有: - 补码交替除法 - 阵列除法器

浮点数用于表示范围很大的数,采用科学计数法的形式: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(非数)

规格化的目的 - 保证表示的唯一性 - 提高精度(充分利用尾数的位数)

规格化形式 对于二进制浮点数,规格化要求尾数的最高位为1(非规格化数除外)。

规格化判断: - 原码:符号位后第一位必须是1 - 补码:符号位与第一位必须不同(对于正数第一位为1,负数第一位为0)

规格化操作 左规:当尾数过小(非规格化)时,尾数左移,阶码减小 右规:当尾数溢出时,尾数右移,阶码增大

浮点数加减法步骤

1. 对阶:使两个数的阶码相同,小阶向大阶看齐

  1. 计算阶差ΔE = E₁ - E₂
  2. 若ΔE > 0,则M₂右移ΔE位,E₂ = E₁
  3. 若ΔE < 0,则M₁右移|ΔE|位,E₁ = E₂

2. 尾数运算:对阶后的尾数进行加减运算

3. 规格化:运算结果可能非规格化,需要进行规格化处理

  1. 左规:尾数左移,阶码减1(直到规格化)
  2. 右规:尾数右移,阶码加1(当尾数溢出时)

4. 舍入:尾数右移时可能丢失低位,需要按一定规则舍入

  1. 截断法:直接丢弃多余位
  2. 舍入法:0舍1入
  3. 恒置1法:最低位置1

5. 溢出判断:阶码是否超出表示范围

  1. 阶码上溢:结果太大,产生溢出错误
  2. 阶码下溢:结果太小,当作0处理

浮点数乘除法

乘法: - 阶码相加 - 尾数相乘 - 结果规格化和舍入

除法: - 阶码相减 - 尾数相除 - 结果规格化和舍入

算术逻辑单元(ALU)是运算器的核心部件,负责执行算术运算和逻辑运算。

ALU的功能: - 算术运算:加法、减法、乘法、除法 - 逻辑运算:与、或、非、异或 - 移位运算:算术移位、逻辑移位、循环移位 - 比较运算:等于、大于、小于等

ALU的结构: ALU主要由以下部分组成: - 加法器:核心运算部件,用于实现加减法 - 逻辑运算电路:与门、或门、非门等 - 移位器:实现各种移位操作 - 标志寄存器:保存运算结果的状态信息

半加器 半加器实现两个一位二进制数的加法,不考虑低位进位。

真值表:

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ᵢ

通过展开递归,可以实现各级进位的并行计算,大大提高运算速度。

定点运算器的基本结构

1. 算术逻辑单元(ALU):执行运算 2. 通用寄存器组:暂存操作数和运算结果 3. 状态寄存器(PSW):记录运算结果的状态

  1. ZF(零标志):结果为0
  2. SF(符号标志):结果为负
  3. CF(进位/借位标志):无符号运算溢出
  4. OF(溢出标志):有符号运算溢出
  5. PF(奇偶标志):结果的奇偶性
  6. AF(辅助进位标志):半字节进位

4. 数据总线:传输数据 5. 移位器:实现移位操作

运算器的工作过程: 1. 从寄存器或存储器取操作数 2. ALU执行运算 3. 结果送回寄存器或存储器 4. 设置状态标志

例题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

核心概念: - 各种数制之间的转换方法 - 原码、反码、补码、移码的定义和转换 - 定点数和浮点数的表示 - 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标准中为什么要引入非规格化数?

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • 计算机组成与体系结构/数据的表示和运算.txt
  • 最后更改: 2026/03/03 23:54
  • 张叶安