3. 计算机组成原理 笔记
1 进位记数制
- 数据表示
- 日常生活中的时间表示
- 60 秒 = 1 分钟;60 分钟 = 1 小时
- 进位规则:逢十进一
- 二进制数
- 基数:2
- 数元:0, 1
- 进位规则:逢二进一
- 用 0 和 1 表示晶体管的导通和截止状态
- 二进制数的表示方法
- 权重表示:“A = A0 * R^0 + A1 * R^1 + …”
- 真值计算:通过奇数权重展开式求得
- 日常生活中的时间表示
- 数制转换
- 十进制
- 基数:10
- 数元:0-9
- 进位规则:逢十进一
- 八进制
- 基数:8
- 数元:0-7
- 进位规则:逢八进一
- 十六进制
- 基数:16
- 数元:0-9, A-F(代表十进制的 10-15)
- 进位规则:逢十六进一
- 十进制
- 数值表示对照表
- 十进制、二进制、八进制和十六进制之间的转换
- 十进制 15 的表示
- 二进制:1111
- 八进制:17
- 十六进制:F
- 十进制 15 的表示
- 数制标识
- 二进制:2 或 B
- 八进制:8 或 O 或 Q
- 十六进制:16 或 H
- 十进制、二进制、八进制和十六进制之间的转换
- 计算机内部数据表示
- 使用二进制的原因
- 简化硬件强度
- 易于晶体管的导通和截止状态表示
- 二进制数的优缺点
- 优点:简化运算和存储
- 缺点:长串难以记忆和直观
- 方便阅读和书写的数制
- 八进制和十六进制
- 与二进制有简单对应关系,易于转换
- 使用二进制的原因
2 数制之间的相互转换
- 二进制与十进制的转换
- 二进制转十进制
- 方法:按照基数权重展开
- 例子:二进制数 111 转换为十进制数 7
- 十进制转二进制
- 方法:除二取余法
- 例子:十进制数 82 转换为二进制数 1010010
- 二进制转十进制
- 二进制与八进制的转换
- 二进制转八进制
- 方法:每三位二进制数转换为一个八进制数
- 例子:二进制数 100111 转换为八进制数 47
- 八进制转二进制
- 方法:每个八进制数转换为三个二进制数
- 例子:八进制数 175.2 转换为二进制数 11110101.010
- 二进制转八进制
- 二进制与十六进制的转换
- 二进制转十六进制
- 方法:每四位二进制数转换为一个十六进制数
- 例子:二进制数 1001110 转换为十六进制数4E
- 十六进制转二进制
- 方法:每个十六进制数转换为四个二进制数
- 例子:十六进制数 6B4 转换为二进制数 11010110100
- 二进制转十六进制
- 十进制与十六进制的转换
- 十进制转十六进制
- 方法:除十六取余法
- 例子:十进制数 300 转换为十六进制数 12C
- 十六进制转十进制
- 方法:按照基数权重展开
- 例子:十六进制数 EAF 转换为十进制数 431
- 十进制转十六进制
3 整数的机器数表示
- 基本概念
- 数值型数据:具有大小正负之分,可用于加减乘除运算,如银行存款、学生成绩等
- 非数值型数据:无正负大小之分,包括英文字母、标点符号等
- 二进制数串:所有数值型数据在计算机中均以二进制数串表示
- 数值型数据表示
- 整数和浮点数
- 整数:无小数部分的数值
- 浮点数:包含小数部分的数值
- 整数和浮点数
- 二进制表示
- 机器字长:决定二进制数串能表示的数值范围
- 无符号数与有符号数
- 无符号数:仅表示非负数值
- 有符号数:能表示正负数值
- 有符号数表示方法
- 原码
- 正数:符号位为 0,其余位表示数值
- 负数:符号位为 1,其余位表示数值
- 反码
- 正数:与原码相同
- 负数:正数的按位取反
- 补码
- 正数:与原码相同
- 负数:正数的反码末位加 1
- 移码
- 通过将补码的符号位取反得到,主要用于表示浮点数的指数部分。
- 原码
- 补码的优点
- 简化运算:补码表示使得加减运算可统一为加法运算,简化了硬件设计
- 唯一表示零:补码中零的表示是唯一的,消除了原码和反码中零有正零和负零两种表示的问题
- 位运算与进位处理
- 补码运算中,最高位的进位会被无条件丢弃,从而简化了运算过程
- 对于负数的运算,通过补码可以更方便地进行加减运算转换
- 应用场景
- 补码:广泛用于整数的存储和运算,简化了计算机硬件设计
- 移码:主要用于浮点数的指数表示,方便判断指数的大小
4 含小数信息的机器数表示
- 浮点数基本概念
- 定义:小数部分不为零的数值,用浮点数格式表示
- 科学计数法:表示为 A × 10^N 的形式,其中 A 是 1 到 10 之间的实数,N 是指数
- 二进制表示
- 二进制科学计数法:N = 2^E × S,其中 E 是二进制整数,S 是二进制尾数
- 表示方法:二进制数通过指数形式表示,便于处理大或小数值
- 浮点数的组成
- 尾数部分:包含尾符和尾数,尾数表示数值的精度
- 指数部分:包含阶码和阶符,阶码表示指数大小,决定小数点的位置
- 规格化表示
- 规格化:尾数部分为纯小数形式,最高位为 1,提高表示精度
- 特点:确保浮点数的表示唯一性,充分利用尾数的有效位数
- 内部表示方法
- 尾数:用原码表示,负数用1表示,添加必要的0来填充位数
- 指数:用补码表示,正数的补码和原码相同。
- 格式化与非规格化表示
- 规格化表示:保证了最高的精度和范围,尾数的最高位为 1
- 非规格化表示:不保证最高位为 1,精度较低
总结
浮点数的计算机内部表示需通过规格化处理,将数值转换为指数形式,然后对尾数和指数分别进行编码。
规格化表示可以提高数据的表示精度和范围,合理分配阶码和尾数位数。
5 BCD 格式表示法
- 引入 BCD 编码的原因
- 计算机内部使用二进制,而人们习惯于十进制
- 大批量数据处理时,十进制到二进制的转换降低效率
- 需要计算机直接处理实际值以提高数据处理效率
- BCD 编码概念
- BCD 码定义:用四位二进制数表示一位十进制数
- 例子:十进制数 38,用 BCD 编码为 0011 和 1000 的组合
- BCD 编码的特点
- 每个十进制位用四位二进制表示
- 16 种排列组合中选取十种表示 0-9
- 不同的编码方法,如 8321、2421、5211 等
- BCD 编码的种类
- 带权码和无权码
- 带权码:8421、2421 等,权重分别代表其值
- 无权码:余三码、格雷码等,权重不直接影响值
- 计算BCD码的值
- 按位计算权重乘以位值后相加
- 示例:1001 在 8421 编码中代表 9,在 5421 编码中代表 6
- 带权码和无权码
- BCD 编码转换示例
- 将十进制数转换为 BCD 编码
- 例子:75.4 转换为 8421 编码
- 方法:分别查找每个十进制数字的 BCD 编码,然后组合
- 将十进制数转换为 BCD 编码
- BCD 编码的优点
- 快速识别十进制和二进制之间的转换
- 提高处理大批量数据时的效率
6 算术运算
- 算术运算
- 整数加减
- 补码实现:补码运算规则简单,符号位参与运算
- 运算规则:加法 - 直接加补码;减法 - 减数补码加被减数,变成加法
- 示例:X=10, Y=14; X+Y=24, X-Y=-4
- 移位运算
- 算术左移:所有位向左移一位,最高位补零,相当于乘以 2
- 算术右移:所有位向右移一位,最低位丢弃,最高位补符号位,相当于除以 2
- 示例:28 的补码左移一位得到 56;右移一位得到 14
- 整数加减
- 逻辑运算
- 与、或、非、异或、同或以及逻辑移位
- 逻辑运算不涉及补码,直接进行位运算
- 逻辑移位不改变数值,只改变表示形式
- 与、或、非、异或、同或以及逻辑移位
- 补码运算
- 补码定义:表示负数的二进制表示方法,使得加减运算简单化
- 补码运算规则:简化运算过程,符号位和数值位一起参与运算
- 补码求原码方法:根据补码的符号位判断正负,正数补码=原码;负数通过补码求原码的运算方法得到真值
- 硬件实现
- 算术逻辑单元(ALU):完成算术运算和逻辑运算
- 加减乘除和算术移位运算
- 通过补码进行加减运算简化了硬件设计
- 算术逻辑单元(ALU):完成算术运算和逻辑运算
7 运算溢出及判断
- 运算溢出的基本概念
- 计算机表示数的范围受机器字长限制
- 8 位字长最大值:127
- 16 位字长最大值:32767
- 一般范围:负的 2 的(N-1)次方到 2 的(N-1)次方减 1
- 溢出定义:算术运算结果超出字长所能表示的范围
- 计算机表示数的范围受机器字长限制
- 溢出判断方法
- 加法运算溢出判断
- 两个正数相加得到负数或两个负数相加得到正数,表示溢出
- 一正一负整数相加永远不会溢出
- 移位运算溢出判断
- 负数移位后变成正数或正数移位后变成负数,表示溢出
- 加法运算溢出判断
- 双符号位法判断溢出
- 双符号位表示:00 表示正数,11 表示负数
- 溢出判断:
- 如果运算结果的两个符号位不同(如 10 或 01),则发生溢出
- 上溢:若双符号位为 01,表示运算结果为正数,但超出了最大表示的正数
- 下溢:若双符号位为 10,表示运算结果为负数,但小于最小表示的负数
- 溢出判断:
- 双符号位表示:00 表示正数,11 表示负数
- 实例分析
- 示例 1
- 机器字长为 8 位,X=89,Y=54
- 补码计算 X+Y 结果的符号位为 1,表示溢出
- 实际值应为 143,超出8位字长最大值 127
- 机器字长为 8 位,X=89,Y=54
- 示例 2
- 机器字长为 8 位,X=-89,Y=-54
- 初始双符号位为 11
- 运算结果的双符号位为 10,表示发生下移溢出
- 运算结果-143,超出8位字长最小负数 -128
- 机器字长为 8 位,X=-89,Y=-54
- 示例 3
- 机器字长为 8 位,X=-80
- 双符号位表示 11
- 算术左移一位后,符号位变成 10,表示发生下溢
- 结果 -160,超出 8 位最长补码所表示的最小负数 -128
- 机器字长为 8 位,X=-80
- 示例 1
- 溢出处理
- 发生溢出时,运算结果不正确,需要计算机进行异常处理
8 逻辑运算
- 逻辑运算基本概念
- 逻辑假与逻辑真
- 零称为逻辑假
- 一称为逻辑真
- 逻辑假与逻辑真
- 逻辑运算类型
- 逻辑与(逻辑乘)
- 运算规则:两个逻辑数都为真时,结果为真
- 逻辑或(逻辑加)
- 运算规则:两个逻辑数中有一个为真时,结果为真
- 逻辑非(逻辑取反)
- 运算规则:逻辑数取反,即 0 变 1,1 变 0
- 逻辑异或
- 运算规则:两个逻辑数不同时,结果为真
- 逻辑同或
- 运算规则:两个逻辑数相同时,结果为真
- 逻辑移位运算
- 包括逻辑左移和逻辑右移
- 逻辑左移:所有位左移,最高位被覆盖,最低位补 0
- 逻辑右移:所有位右移,最低位被覆盖,最高位补 0
- 包括逻辑左移和逻辑右移
- 逻辑与(逻辑乘)
- 逻辑运算与算术运算的区别
- 算术运算
- 数据有正负大小之分
- 进行整体处理,运算时可能产生进位
- 逻辑运算
- 数据没有正负大小之分
- 各位之间相互独立进行运算,不会产生进位
- 算术运算
- 逻辑运算例子
- 计算两个二进制数的逻辑与、逻辑或、逻辑异或和同步的结果
- 计算一个二进制数的逻辑非、逻辑左移和逻辑右移的结果
9 ASCII 编码
- 字符编码概述
- 定义: 将非数值型数据(如字母、数字、标点符号等)转换为二进制格式的过程,以便计算机能够识别、存储、传输和处理这些数据
- 编码方案: 指为每个字符指定一个唯一的二进制数串的规则,如 ASCII 和 Unicode 编码
- ASCII 编码
- 简介: 美国标准信息交换编码的缩写,最初为美国标准,现国际通用
- 特点
- 单字节字符编码方案,主要应用于英文字母、数字及标点符号的表示
- 分为标准 ASCII 码和扩展 ASCII 码
- 标准 ASCII 码
- 使用 7 位二进制数,覆盖 128 个符号(0 到 127)。
- 包含所有大写英文字母、0 到 9 的数字、各种标点符号及95种可显示符号。
- 扩展 ASCII 码
- 使用 8 位二进制数,可编码 256 个符号
- 前 128 种代码与标准 ASCII 码相同,后 128 种代码通常用于特殊符号和其他语言字符
- 控制字符: 代码 0 到 31 以及 127 是控制字符,如换行符(代码10)、回车符(代码13),通常无法显示
- 编码规律
- 数字 0 到 9 的 ASCII 码依次递增。
- 大写字母 A 到 Z 的 ASCII 码依次递增。
- 小写字母 a 到 z 的 ASCII 码依次递增,且大写字母的 ASCII 码小于小写字母
总结:
ASCII 编码是计算机科学中广泛使用的编码方案,尤其是对于西文字符的表示。
理解 ASCII 编码对于学习计算机处理文本数据非常重要。
10 Unicode 编码
- 编码方式
- UCS-4
- 使用四个字节编码,覆盖所有可能的字符。总体是一个四维编码空间
- 整个空间有 128 个组
- 每个组有 256 个平面
- 每个平面 256 行 x 256 列。每个代码点可编码一个符号,基于四个字节表示。
- UCS-2
- 基本多语言平面 (BMP):第零组的第零个平面,编码了常用文字、标点和图形符号
- 对 UCS-4 的BMP 平面去掉前面 2 个字节就能得到 UCS-2
- 使用两个字节编码,适用于大部分常见字符
- UCS-4
- 实现方式
- UTF-8
- 以字节为单位编码,不同范围的字符使用不同长度的编码
- 对于 00 到 7F 之间的字符,与 ASCII 相同
- UTF-16
- 以 16 位无符号数为单位,对 BMP 符号的编码
- 针对字节序列的不同,有 UTF-16BE 和 UTF-16LE 两种实现方式
- UTF-32
- 以 32 位无符号数为单位,较少使用因占用空间大。
- 有 UTF-32 BE 和 UTF-32 LE 两种实现方式。
- 字节序问题
- 在多字节编码中,字节的顺序有两种:大端序(BE)和小端序(LE)
- UTF-8 无字节序问题,UTF-16 和 UTF-32 需要明确字节序
- UTF-8
- 转换格式
- 字节序标记 (BOM)
- 用于区分字节序,FEFF 表示大端序,FFFE 表示小端序
- 应用
- UTF-8、UTF-16 和 UTF-32 的广泛使用
- 交易信息时需明确对方的字节序
- 字节序标记 (BOM)
总结:Unicode 编码是为全球文字和符号制定的统一编码方案,通过不同编码方式和实现方式,满足了跨语言、跨平台的文本处理需求。
UTF-8 和 UTF-16 是目前最广泛使用的转换格式,而 UTF-32 因占用空间大而较少使用。
字节序问题是处理多字节编码时需要特别注意的点,通过字节序标记(BOM)可以解决这一问题。
11 汉字编码
-
汉字编码系统
- 汉字信息处理流程
- 输入、存储、编码、传输、输出
- 汉字编码类型
- 输入码
- 区域输入法
- 字形输入法
- 拼音输入法
- 混合输入法
- 字形码
- 点阵表示方式
- 特点:图形方式存储汉字,如 16x16、24x24、48x48 点阵
- 存储:占用更多空间,放大后质量下降
- 矢量式
- 特点:记录笔画信息,如坐标、半径、弧度等
- 存储:占用空间小,可任意缩放
- 点阵表示方式
- 机内码:当采用某种输入编码将汉字输入到计算机后,在计算机内部需要用二进制数来存储汉字
- 输入码
- 汉字信息处理流程
-
区位码:区位码是一个四位的十进制数,前两位是区号,后两位是位号。例如,“万”字的区位码为 4582,其中 45 为区号,82 为位号
-
国标码(国家标准与编码)
- 定义 国标码是汉字编码的标准形式,由 4 位十六进制数组成。
- GB2312
- 由中国国家标准总局 1980 年发布,GB 即国标
- 国标码是汉字编码的标准形式,由 4 位十六进制数组成。
- 编码数量:6763 个汉字,682 个图形字符
- 编码方法:使用两个字节表示,最高位为 0
- 编码区域:94 个区,每个区 94 个位
- GBK,Chinese Internal Code Specification,即汉字内码扩展规范,K 为汉语拼音“扩”字的声母,于 1995 年 12 月发布的汉字编码国家标准
- GB 18030
- 国家标准 GB 18030-2005,是中国目前最新的内码字集,于 2000 年 3 月发布的汉字编码国家标准
- 存储时可能占用 2 个字节或 4 个字节
- 区位码与国标码的关系
- 国标码 = 区位码的 16 进制 + 20H
- 加 20H 的原因:避免与 ASCII 控制字符冲突
-
机内码
- 定义
- 机内码是计算机内部使用的编码形式。通常用两个字节表示一个汉字,每个字节的最高位为 1
- 与国标码的区别
- 机内码 = 国标码 + 80H
- 实际应用
- 文件存储时,英文字母保存为 ASCII 码,每个汉字保存为其机内码,两个字节表示
- 定义
-
汉字编码转换示例
- “宝”字
- 区位码:17, 3 -> 11H, 03H
- 国标码:31H, 23H
- 机内码:B1H, A3H
- “宝”字
12 数据校验编码
- 定义及必要性
- 数据校验编码定义:在数据处理、传输、存储过程中,为发现并纠正错误,对要传输的数据按某种规则进行编码,使编码后的数据具备检测甚至更正错误的功能
- 必要性:数据在处理、传输及存储过程中易出错,校验编码用于提高数据可靠性
- 常用的校验编码方法
- 校验码
- 基本概念:校验码是基本的校验编码统称,通过增加一位额外的校验信息来检测错误
- 种类:
- 奇偶校验码:通过保证序列中 “1” 的个数为奇数或偶数来校验错误
- 应用:广泛应用于计算机存储器的读写校验,以及单个 ASCII 码字符的传输校验。
- 循环冗余校验码(CRC)
- 原理:基于除法和余数的原理,用一个多项式去除整个数据块得到的余数作为校验码
- 应用:在表面存储器(如硬盘、磁带)和计算机高速通讯领域广泛应用。
- 海明校验码
- 提出:由海明在 1950 年提出
- 特点:能检测出两位同时出错或更多错误,但无法自动进行纠错
- 编码复杂性:将校验位和有效信息进行分组编码,过程较复杂
- 校验码
总结:数据校验编码技术对传输的数据加入某个规则进行编码,使编码后的数据具备检测甚至更正错误的功能,以提高数据传输的可靠性。
常用的校验编码方法包括:校验码、循环冗余校验码(CRC)、海明校验码,每种方法都有其特点和应用场景。