☰
计算机组成原理 第 2 章|2.1-2.2
2026/10/18 13:51:07 网站建设 项目流程

一、数据的表示分类

计算机数据分为数值数据(可计算,定点 / 浮点)、符号数据(文字、标记,ASCII、汉字编码) 选择数据表示要考虑:数类型、数值范围、精度、硬件成本

1. 定点数

小数点位置固定不变,只有纯小数、纯整数两种

  • 纯小数:小数点在符号位后,0≤|x|<1-
  • 纯整数:小数点在最低位右侧,0≤|x|≤-1

优点:硬件简单;缺点:表示范围有限

2. 浮点数

格式:N=× M

  • M:尾数(决定精度);
  • e:阶码(决定数值范围) 机器存储分为:
  • 符号 S、阶码 E、尾数 M三部分

3. BCD 码(十进制数)

两种形式

  1. 字符串:1 字节存 1 位十进制
  2. 压缩 BCD:1 字节存 2 位十进制(4 位一组,8421 编码)

二、机器码:原码、反码、补码、移码

正数:原码 = 反码 = 补码,符号位 0 负数:符号位固定为 1,数值位不同编码不一样

  1. 原码符号位 + 真值绝对值;0 有+0、-0两种表示;减法麻烦,需要比较绝对值
  2. 反码正数同原码;负数:符号位不变,数值位全部按位取反;一般作为求补码的中间工具
  3. 补码(最常用!)正数同原码;负数 = 反码 + 1;0 只有唯一一种表示;核心优势:减法可以直接变成加法,硬件只需要加法器
  4. 移码(偏置码)常用于浮点数阶码;公式:\(\boldsymbol{[e]_{移}=2^k+e}\);移码大小直接反映指数大小,方便比较阶码。

记忆:移码和补码仅符号位相反。

三、IEEE754 浮点数标准

32 位单精度浮点数

S (1 位符号) + E (8 位阶码,偏移 127) + M (23 位尾数) 真值公式:x=(-) ×(1.M) ×

隐藏最高位 1,不存进 M,节省 1bit,提升精度

64 位双精度浮点数

S (1) + E (11 位,偏移 1023) + M (52 位尾数) 真值公式:x=(-) ×(1.M) ×

特殊情况:

  • E 全 255,M≠0 → NaN(非数)
  • E 全 255,M=0 → 无穷大
  • E=0,M=0 → 机器 0
  • E=0,M≠0 → 非规格化浮点数

四、字符与汉字编码

ASCII 码

7 位编码,占 1 字节(最高位 0);一共 128 个字符:95 个可打印 + 33 个控制字符

  • 0~9:0x30~0x39
  • 大写 A-Z:0x41~0x5A
  • 小写 a-z:0x61~0x7A

大小写相差 32

汉字编码(三类)

  1. 输入码(外码):从键盘输入汉字
    • 区位码:数字编码,无重码,难记
    • 拼音码:好上手,重码多
    • 字形码(五笔):按字形编码,重码少,学习成本高
  2. 交换码:国标码 GB2312、GB18030;用于不同设备之间汉字传输
  3. 输出码(字模):汉字字形,两种
    • 点阵:简单直观,放大失真,占用空间大
    • 矢量:存轮廓,放大不失真,质量高

GB18030:不等长编码,兼容 ASCII,包含大量生僻字;UTF-8、UTF-16 是 Unicode 实现方案。

五、校验码:奇偶校验

在原始数据上加 1 位校验位,检测传输错误

  • 奇校验:整个编码(数据 + 校验位)里面,1 的总数为奇数
  • 偶校验:整个编码里面,1 的总数为偶数

✅特点:只能检测奇数个位错误;无法纠错,检出错误后只能重传,电路简单。

例子:数据10101010

  • 偶校验:数数据里 1 有 4 个(偶数)→校验位填 0 →编码101010100
  • 奇校验:1 有 4 个,需要凑奇数 →校验位填 1 →编码101010101

六、定点加减法运算

计算机普遍用补码加法,减法直接转化加法 [X+- Y]{补}=[X]{补}+[+- Y]{补},溢出需要单独判断

补码加法

公式:

[x+y]补 = [x]{补} + [y]{补} (mod)

要点:

  1. 符号位和数值位一起参与加法运算
  2. 模,超过的进位直接丢掉

例子:x=+1001,y=+0101 [x]{补}=01001, [y]{补}=00101

plaintext

01001 + 00101 -------- 01110

[x+y]{补}=01110,真值+1110

✅ 补码减法

减法转加法:[x-y]{补} = [x]{补} + [-y]{补}

求负数补码规则(求补运算): 对[y]{补},连同符号位全部按位取反,末位 + 1,得到[-y]{补}。

例:[y]{补}=00110,则[-y]{补}=11010

本质:把减法统一变成加法,硬件只需要一套加法器电路。

七、溢出判断

溢出:运算结果超出补码能表示范围,结果错误

  • 正溢出:两个正数相加,结果 > 最大正数
  • 负溢出:两个负数相加,结果 < 最小负数

两种检测方法

  1. 双符号位法(变形补码)⭐用 2 位符号位:00 = 正数,11 = 负数

    • 结果符号位:01→正溢出
    • 结果符号位:10→负溢出
    • 00/11:无溢出 逻辑:V=S{n1} 异或S{n2},异或为 1 代表溢出。
  2. 单符号位法最高数值位进位C0,符号位进位Cf V=Cf 异或 C0,V=1溢出;Cf和C0不一样就溢出。

记住口诀:同号相加才可能溢出;一正一负相加永远不会溢出!


八、加法器

1. 一位全加器

输入:Ai、Bi(本位两个操作数),Ci低位进位

输出:本位和Si,向高位进位C{i+1}

Si = Ai 异或 Bi 异或 Ci

C{i+1}= AiBi + (Ai异或 Bi)Ci

2. 行波进位加法器(串行进位加法器)

n 个 FA 串联,低位进位输出送到高位进位输入。

✅优点:电路简单

❌缺点:进位逐级传递,位数越大速度越慢,延迟随 n 线性增长。

3. 先行进位 CLA(超前进位加法器)⭐

核心:所有进位不需要等待低位算完,直接由原始输入(Ai,Bi)一次性算出

定义两个函数:

  • 本地进位Gi = AiBi:本位自己就能产生进位
  • 传送进位Pi=Ai异或Bi:把低位的进位传递到高位

进位公式:C{i+1}=Gi + PiCi}

展开:

C1 = G0 + P0C0

C2 = G1 + P1G0 + P1P0C0

C3 = G2 + P2G1 + P2P1G0 + P2P1P0C0

✅速度快;

❌电路复杂,位数很大时硬件成本太高。

4. 分组先行进位(单级 / 多级分组 CLA)

折中方案:组内先行进位,组间可以串行进位,也可以先行进位

  • 单级分组:如 16 位拆成 4 组 ×4bit,组内 CLA,组间串行
  • 多级分组(两级先行 BCLA):组内先行,组之间也先行进位,速度更快,硬件更复杂。

课后思考题简答

问:为什么一套加法器可以实现加法和减法?创新点? 答:利用补码减法规则,x-y = [x]{补}+[-y]{补}; 做减法时,把减数y按位取反,最低位加 1 得到\[-y]{补},送入加法器,减法转化为加法运算。 创新点:加减统一为加法运算,硬件只需要加法器,不用单独减法电路,简化运算器。


一句话总结

  1. 二进制、八、十、十六进制互相转换;BCC、ASCII 码。
  2. 原码:符号位 + 绝对值;正负 0 表示不同,做加减麻烦
  3. 反码:正数 = 原码;负数符号不变,数值位按位取反;正负 0 两种形式
  4. 补码:正数 = 原码;负数 = 反码 + 1;只有一个 0,计算机加减统一用补码加法(减法 = 加负数补码)
  5. 移码:补码符号位取反;用于浮点数阶码;偏置值偏移,便于比较大小
  6. 溢出:结果超出字长能表示范围,只有同号相加、异号相减才可能溢出
  7. 判断方法: ① 双符号位(变形补码):01 正溢出,10 负溢出;00、11 无溢出 ② 最高进位与符号位进位异或,结果 = 1 溢出,0 无溢出
  8. 浮点数格式:阶码 (移码) + 尾数 (补码),阶码:决定表示范围;尾数:决定精度,规格化:尾数最高位必须是有效 1;浮点数加减:对阶→尾数加减→规格化→舍入→判溢出

小判断题

  1. 码减法可转化为补码加法。✅
  2. 原码加减运算不能直接相加,需要单独处理符号。✅
  3. 移码常用于浮点数尾数编码。❌(是阶码,不是尾数)
  4. 双符号位 01 代表负溢出。❌(01 正溢出,10 负溢出)
  5. 补码中 0 只有唯一表示。✅
  6. 浮点数对阶时,小阶向大阶对齐。✅
  7. 浮点数溢出看尾数是否溢出。❌(溢出看阶码,尾数溢出可以规格化解决)
  8. 字长相同,浮点数表示范围大于定点数。✅
  9. 反码有 + 0、-0 两种表示。✅
  10. 同号两数相减会发生溢出。❌(同号相加才会溢出)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询