生活是一道长长的旅程,充满了挑战和困难。然而,我们必须坚持下去,努力前进。无论遇到什么困难,我们都要勇敢面对,永不放弃。只有通过不断的努力和坚持,我们才能够取得成功。在这个旅程中,我们可能会失败,但失败并不可怕,只要我们愿意从失败中吸取教训,不断改进自己,我们就一定能够找到成功的道路。成功不是一蹴而就的,它需要我们付出持久的努力和毅力。在困难面前,我们要保持积极的心态,坚信自己的能力,并将困难视为机会去成长和进步。我们要相信自己的潜力和能力,相信未来的美好。只有不停地努力和奋斗,我们才能够实现自己的梦想,创造属于自己的辉煌。让我们一起努力,不断追求进步,勇往直前,向着成功的目标前进!
计算机组成原理资源网
https://www.wenjingketang.com/这里面有ppt课后习题及答案,需要的可以自行下载
目录
1.1 数制与编码
1.1.1 常用的进位计数制及其相互转换
1.1.2 BCD码 (Binary-Coded Decimal)
1.1.3 字符与字符串
1.1.4 汉字编码
1.1.5 校验码
1.1.6 真值和机器数
1.1 数制与编码
1.1.1 常用的进位计数制及其相互转换
定义: 进位计数制是表示数值的一种方法,每个数字的位置决定了它的权重。常用的进位计数制包括:
- 二进制(Binary): 只有0和1两个数字,基数为2。
- 八进制(Octal): 使用0到7八个数字,基数为8。
- 十进制(Decimal): 我们日常生活中最常用的计数系统,使用0到9十个数字,基数为10。
- 十六进制(Hexadecimal): 使用0到9和A到F共十六个符号,其中A到F分别代表10到15,基数为16。
相互转换:
-
十进制转其他进制: 以转换为二进制为例,通过除基取余法进行转换。例如,将十进制数42转换为二进制:
- 42 ÷ 2 = 21...0
- 21 ÷ 2 = 10...1
- 10 ÷ 2 = 5...0
- 5 ÷ 2 = 2...1
- 2 ÷ 2 = 1...0
- 1 ÷ 2 = 0...1
- 结果为
101010
,从下往上读取余数。
-
其他进制转十进制: 使用按权展开求和法。例如,将二进制数
101010
转换为十进制:- 1×25+0×24+1×23+0×22+1×21+0×20=32+0+8+0+2+0=421×25+0×24+1×23+0×22+1×21+0×20=32+0+8+0+2+0=42
-
二进制与八进制/十六进制之间的转换: 直接分组转换。因为8 = 2^3,所以每三位二进制数可以转换成一位八进制数;同样地,由于16 = 2^4,每四位二进制数可以转换成一位十六进制数。例如,将二进制数
101010
转换为八进制:101 010
→52
- 将二进制数
101010
转换为十六进制: 0010 1010
→2A
1.1.2 BCD码 (Binary-Coded Decimal)
定义: BCD码是一种特殊的二进制编码方式,用来表示十进制数。每一位十进制数用4位二进制数表示(0000到1001),因此一个字节可以表示两位十进制数。
例子:
- 十进制数56在BCD码中表示为
0101 0110
。
特点:
- 直观易懂,便于人们阅读和理解。
- 在某些应用场景下(如金融计算)避免了二进制浮点运算带来的精度损失。
1.1.3 字符与字符串
字符编码:
- 计算机内部使用特定的编码方案来表示字符。最常用的是ASCII(American Standard Code for Information Interchange)和Unicode标准。
- ASCII: 使用7位或8位二进制数表示128或256个不同的字符,包括字母、数字、标点符号等。例如,字母'A'在ASCII中的编码是
01000001
。 - Unicode: 支持更多的字符集,特别是非拉丁文字符,如中文、日文等。UTF-8是变长编码,对于ASCII字符占用1个字节,而对于其他字符(如汉字)则可能需要2到4个字节。
- ASCII: 使用7位或8位二进制数表示128或256个不同的字符,包括字母、数字、标点符号等。例如,字母'A'在ASCII中的编码是
字符串:
- 字符串是由多个字符组成的序列。例如,在Python中,字符串可以用引号括起来表示:
s = "Hello, World!"
1.1.4 汉字编码
定义: 汉字编码是指如何用计算机可以识别的方式表示汉字。早期有GB2312、GBK等编码标准,现在普遍采用UTF-8、UTF-16等更通用的Unicode编码。
例子:
- UTF-8编码下的“你好”:
- “你”的UTF-8编码可能是
E4 BD A0
(具体取决于实现)。 - “好”的UTF-8编码可能是
E5 A5 BD
。
- “你”的UTF-8编码可能是
特点:
- UTF-8是变长编码,对于ASCII字符占用1个字节,而对于其他字符(如汉字)则可能需要2到4个字节。
- 它兼容ASCII,同时能够表示全世界几乎所有语言的文字。
1.1.5 校验码
定义: 校验码是为了检测传输错误而附加的数据。它可以是奇偶校验、循环冗余校验(CRC)等形式。
应用:
- 在数据通信中,发送端会根据一定规则生成校验码并附带在数据后面一起发送;接收端收到数据后重新计算校验码并与接收到的进行对比,如果不一致则说明数据可能出错。
例子:
- 奇偶校验: 如果使用偶校验,那么所有有效位加上校验位应该包含偶数个1。例如,数据
1010
(有两个1)加上偶校验位后变为10100
(仍然是两个1)。 - 循环冗余校验(CRC): CRC是一种更为复杂的校验方法,它基于多项式除法原理,能提供更高的检错能力。例如,Ethernet帧尾部的FCS字段就是通过CRC算法计算出来的。
1.1.6 真值和机器数
真值: 真值是指实际存在的数值,即我们在日常生活和数学中使用的数字,可以是正数、负数或零。
机器数: 机器数是计算机内部用来表示数值的形式,采用二进制表示法。由于计算机硬件基于二进制逻辑工作,所有数据必须以机器数形式存储和处理。
- 无符号数: 只能表示非负数,每一位都用于表示数值大小,没有专门的符号位。
- 有符号数: 可以表示正数和负数,最高位通常作为符号位,0 表示正数,1 表示负数。
- 原码: 符号位加上绝对值的二进制表示。例如,8位二进制中的+5为
00000101
,-5为10000101
。 - 反码: 正数的反码等于其原码;负数的反码是在原码基础上,除了符号位外,其余各位取反。例如,-5的反码为
11111010
。 - 补码: 是最常用的表示方式。正数的补码等于其原码;负数的补码是在其反码的基础上加1。例如,-5的补码为
11111011
。
- 原码: 符号位加上绝对值的二进制表示。例如,8位二进制中的+5为
计算示例:
- 从真值到机器数(补码)的转换:
- 转换十进制数-5为8位二进制补码:
- 先将5转换为二进制:
00000101
- 对这个二进制数取反:
11111010
- 加1:
11111011
- 先将5转换为二进制:
- 转换十进制数-5为8位二进制补码:
- 从机器数(补码)到真值的转换:
- 解释8位二进制补码
11111011
:- 检查符号位,最高位是1,说明这是一个负数。
- 减1后对剩余部分取反:
11111010
->00000101
- 将结果转换回十进制,并加上负号:-5
- 解释8位二进制补码
总结: 数制与编码的知识覆盖了计算机内部数据表示的核心概念,从不同进位计数制之间的转换到具体的编码方式,再到确保数据完整性的校验机制,都是理解和设计高效计算机系统的关键要素。