408——计算机组成原理 第二章 数制的表示和运算

在这里插入图片描述
在这里插入图片描述

1. 数制和编码

1.1 进位计数制及其相互转换

1.1.1 进位计数制

二进制: 0,1

好处:
①可使用两个稳定状态的物理器件表示
②0,1正好对应逻辑值假、真。方便实现逻辑运算
③可很方便地使用逻辑门电路实现算术运算

八进制: 0,1,2,3,4,5,6,7

十进制: 0,1,2,3,4,5,6,7,8,9

十六进制: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

1.1.2 不同进制间的相互转换

1.任意进制→十进制
在这里插入图片描述
2.二进制转八进制、十六进制
在这里插入图片描述
3.十进制转任意进制

整数部分:除基取余法,先取得的“余”是整数的低位。
在这里插入图片描述
小数部分:乘基取余法,先取的“整”是小数的高位
在这里插入图片描述

各种进制的常见书写方式:
在这里插入图片描述

1.2 真值和机器数

真值:符合人类习惯的数字

机器数:数字实际存到机器里的形式,正负号需要被“数字化”

1.3 字符与字符串

在这里插入图片描述

1.4 校验码(考纲删除,计网会考)

1.4.1 奇偶校验码

在这里插入图片描述
由若干位代码组成的一个字叫码字
将两个码字逐位进行对比,具有不同的位的个数称为两个码字间的距离
一种编码方案可能有若干个合法码字,各合法码字间的最小距离称为“码距”。
当d=1时,无检错能力;当d=2时,有检错能力;当d≥3时,若设计合理,可能具有检错、纠错能力

奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数。

偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数。
在这里插入图片描述

1.4.2 海明校验码

海明码设计思路:将信息位分组进行偶校验—> 多个校验位—>多个校验位标注出错位置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4.3 循环冗余校验码

循环冗余校验(Cyclic Redundancy Check, CRC)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.5 练习

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
C
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
AC
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 定点数的表示和运算

2.1 定点数的表示

2.2.1 无符号数的表示

无符号数:整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值。

2.2.2 有符号数的表示

在这里插入图片描述
原码

定义:用尾数表示真值的绝对值,符号位“0/1”对应“正/负”。

若机器字长n+1位,原码整数的表示范围:−(2n−1) ≤ x ≤ 2n−1(关于原点对称)真值0有+0 和-0 两种形式。
原码小数的表示范围:−(1−2−n) ≤ x ≤ 1−2−n(关于原点对称)真值0有+0 和-0 两种形式。

反码

定义:若符号位为0,则反码与原码相同若符号位为1,则数值位全部取反。

若机器字长n+1位,反码整数的表示范围:−(2n−1) ≤ x ≤ 2n−1(关于原点对称)真值0有+0 和-0 两种形式。
反码小数的表示范围:−(1−2−n) ≤ x ≤ 1−2−n(关于原点对称)真值0有+0 和-0 两种形式。

补码

定义:正数的补码=原码;负数的补码=反码末位+1(要考虑进位)。

定点整数补码[x]= 1,0000000表示x = -27
若机器字长n+1位,补码整数的表示范围:−2n ≤ x ≤ 2n−1 (比原码多表示一个−2n
定点小数补码[x]= 1.0000000表示x = -1
若机器字长n+1位,补码小数的表示范围:−1 ≤ x ≤ 1−2−n (比原码多表示一个−1 )

补码的真值0只有一种表示形式,[+0]= [-0]= 00000000
eg:将负数补码转回原码的方法相同:尾数取反,末位+1

作用: 使用补码可将减法操作转变为等价的加法,ALU中无需集成减法器。执行加法操作时,符号位一起参与运算。

移码

定义:补码的基础上将符号位取反。注意:移码只能用于表示整数

[+0]移= [-0]移= 10000000。
若机器字长n+1位,移码整数的表示范围:−2n ≤ x ≤ 2n−1 (与补码相同)\

由[x]补快速求[-x]补的方法: 符号位、数值位全部取反,末位+1

作用: 移码表示的整数很方便对比大小。

2.2 定点数的运算

2.2.1 移位运算

原码

符号位保持不变,仅对数值位进行移位。
右移: 高位补0,低位舍弃。若舍弃的位=0,则相当于÷2;若舍弃的位≠0,则会丢失精度。
左移: 低位补0,高位舍弃。若舍弃的位=0,则相当于×2;若舍弃的位≠0,则会出现严重误差。

反码

正数的反码与原码相同, 因此对正数反码的移位运算也和原码相同。
右移:高位补0,低位舍弃。左移:低位补0,高位舍弃。
负数的反码数值位与原码相反, 因此负数反码的移位运算规则如下,
右移:高位补1,低位舍弃。左移:低位补1,高位舍弃。

补码

正数的反码与原码相同, 因此对正数补码的移位运算也和原码相同。
右移:高位补0,低位舍弃。左移:低位补0,高位舍弃。
负数补码的算数移位规则如下:
右移(同反码): 高位补1,低位舍弃。
左移(同原码): 低位补0,高位舍弃。

逻辑移位

逻辑右移:高位补0,低位舍弃。逻辑左移:低位补0,高位舍弃。

循环移位

不带进位位:用移出的位补上空缺。
带进位位:移出的位放到进位位,原进位位补上空缺。

2.2.2 加减运算

原码
在这里插入图片描述
补码
由[x]补快速求[-x]补的方法: 符号位、数值位全部取反,末位+1
在这里插入图片描述
溢出判断:

只有“正数+正数”才会上溢——正+正=负
只有“负数+负数”才会下溢——负+负=正

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.3 乘法

原码
在这里插入图片描述
补码
在这里插入图片描述

2.3.4 除法

原码
在这里插入图片描述
在这里插入图片描述
补码
在这里插入图片描述

2.3 C语言中的整数类型及类型转换

在这里插入图片描述
符号扩展:

定点整数的符号扩展: 在原符号位和数值位中间添加新位,正数都添0负数原码添0,负数反、补码添1
定点小数的符号扩展: 在原符号位和数值位后面添加新位,正数都添0负数原、补码添0,负数反码添1

2.4 数据的存储和排列

在这里插入图片描述
在这里插入图片描述

练习

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
D
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 浮点数的表示和运算

3.1 浮点数的表示

在这里插入图片描述
阶码: 常用补码或移码表示的定点整数
尾数: 常用原码或补码表示的定点小数

浮点数尾数的规格化:

规格化浮点数: 规定尾数的最高数值位必须是一个有效值。
左规: 当浮点数运算的结果为非规格化时要进行规格化处理,将尾数算数左移一位,阶码减1。
右规: 当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数算数右移一位,阶码加1。

在这里插入图片描述
在这里插入图片描述

3.2 浮点数的加减运算

在这里插入图片描述

练习

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
B
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 算术逻辑单元 ALU(非重点)

在这里插入图片描述

### 计算机组成原理第七版白中英第二章内容概述 #### 2.1 数制及其转换 本节介绍了数制的概念以及不同进位计数制之间的相互转换方法。涵盖了二进制、十进制、十六进制等常见数制,并讲解了如何实现这些数制间的精确互转[^1]。 #### 2.2 数据表示法 讨论了计算机内部数据的各种编码方式,包括但不限于原码、反码、补码等形式来表达正负数值。还涉及浮点数IEEE标准下的规格化形式等内容。 #### 2.3 定点加减运算 阐述了定点整数小数在机器中的具体表现形式及其实现加减操作的基本逻辑电路设计思路。通过硬件层面解释了溢出判断机制等问题。 #### 2.4 定点乘除运算 深入探讨了两种基本算法——阵列乘法器与Booth算法用于高效完成大数相乘任务;对于除法则提到了恢复余数法不恢复余数法这两种主流方案。 #### 2.5 浮点运算基础 简要介绍浮点数的构成要素(阶码、尾数),并说明其相对于定点数的优势所在。接着分析了浮点加减乘除四种运算的具体流程及相关注意事项。 ```python def add_binary_numbers(x, y): max_len = max(len(x), len(y)) x = x.zfill(max_len) y = y.zfill(max_len) result = '' carry = 0 for i in range(max_len - 1, -1, -1): r = carry r += 1 if x[i] == '1' else 0 r += 1 if y[i] == '1' else 0 result = ('1' if r % 2 == 1 else '0') + result carry = 0 if r < 2 else 1 if carry != 0: result = '1' + result return result.zfill(max_len) print(add_binary_numbers('011', '101')) # 输出:1000 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值