计算机的运算方法——第六章
时间:2022-09-28 19:30:00
计算机操作方法-第六章
-
- 一、无符号数和有符号数
-
- 1. 无符号数
- 2. 有符号数
-
- 1. 机器数和真值
- 2. 原码表示法
-
- 1. 整数
- 2. 小数
- 3. 小结
- 4. 例题
- 3. 补码表示法
-
- 1. 补的概念
- 2. 正数补数本身就是
- 3. 补码定义
-
- 1. 整数
- 2. 小数
- 4. 快速寻求补码
- 4. 反码表示法
-
- 1. 反码定义
-
- 1. 整数
- 2. 小数
- 2. 例子
- 5. 原码、补码、反码总结
-
- 例题
- 6. 移码表示法
-
- 1. 定义
- 2. 对比移码和补码
- 3. 对照表的真实值、补码和移码
- 4. 移码的特点
- 二、数字的定点表示和浮点表示
-
- 1. 定点表示
- 2. 浮点表示
-
- 为什么要在计算机中引入浮点数表示?
- 1. 浮点数表示形式
- 2. 浮点数的表示范围
- 3. 浮点数的标准化形式
- 4. 浮点数的规格化
- 3. 例题部分
-
- 机器零
- 4. IEEE 754 标准
- 三、定点操作
-
- 1. 移位运算
-
- 1. 移位的意义
- 2. 算术移位规则
-
- 1. 移位补充规则分析
- 2. 移位操作示例
-
- 1. 正数移位运算
- 2. 负移位操作
- 3. 实现算术移位硬件
- 4. 算术移位和逻辑移位的区别
- 2. 加减法运算
-
- 1. 补码加减法运算公式
- 2. 两个例子
- 3. 溢出判断
-
- 1. 一个符号位置溢出
- 2. 两个符号位置溢出
- 4. 补码加减法的硬件配置
- 3. 乘法运算
-
- 1. 分析笔算乘法
- 2. 改进笔算乘法
- 3. 改进后的笔算乘法过程(竖式)
- 4. 小结
- 5. 原码乘法
-
- 1. 乘运算规则的原码
- 2. 乘递推公式原码
- 3. 原码一乘硬件配置
- 6. 补码乘法
- 4. 除法运算
-
- 1. 分析笔算除法
- 2. 笔算除法与机器除法的比较
- 3. 原码除法
-
- 1. 恢复余数法
- 2. 不恢复余数法(加减交替法)
- 3. 原码加减交替除法硬件配置
- 四、浮点四则运算
-
- 1. 浮点加减法操作
-
- 1. 对阶
-
- 1. 求阶差
- 2. 对阶原则
- 3. 规格化
-
- 1. 定义规格化数
- 2. 判断规格化数
- 3. 左规
- 4. 右规
- 4. 舍入
- 5. 溢出判断
- 五、算数逻辑单元
-
- 1. ALU电路
- 2. 快速进位链
-
- 1. 并行加法器
- 2. 串行进位链
- 3. 并行进位链
-
- 1. 单重组跳跃进位链
- 2. 双重分组跳跃进位链
-
- 1. 大组进位分析
- 2. 小组进位分析
- 3. 总结
一、无符号数和有符号数
1. 无符号数
特点:保存时只有数值位,没有符号位。如果用寄存器保存无符号数,则寄存器的位数反映了无符号数的表示范围。
- 寄存器为 8 位,无符号数表示范围为 0~255
- 寄存器为16位,无符号数表示范围为 0~65535
2. 有符号数
1. 机器数与真值
如图 小数点的位置以约定的方式给出
2. 原码表示法
1. 整数
定义如下:
[ x ] 原 = { 0 , x 2 n > x ≥ 0 2 n − x 0 ≥ x > − 2 n x 为 真 值 , n 为 整 数 的 位 数 [x]_原 = \begin{cases} 0,x \qquad 2^n > x \geq 0\\ 2^n-x \quad 0 \geq x > -2^n\end{cases} \qquad x为真值,n为整数的位数 [x]原={
0,x2n>x≥02n−x0≥x>−2nx为真值,n为整数的位数
对于 2 n − x 2^n-x 2n−x的解释:数值部分位数为 n n n,符号位如果加一的话,实际上就相当于给这个数据的绝对值加上了 2 n 2^n 2n
2. 小数
定义如下:
[ x ] 原 = { x 1 > x ≥ 0 1 − x 0 ≥ x > − 1 [x]_原 = \begin{cases} x \qquad\quad 1>x\geq0 \\ 1-x \quad 0 \geq x > -1 \end{cases} [x]原={
x1>x≥01−x0≥x>−1
3. 小结
数值类型 | 真值 | 原码表示 | 计算公式 | 变换特点 |
---|---|---|---|---|
整数 | x (正数) | 0,x | 0,x | 在最左侧加一个符号位表示符号 |
x (负数) | 1,x | 2^n-x | ||
整数部分为0的小数(纯小数) 如0.2 | x (正数) | x | x | 整数部分变成符号位(个位变符号位) |
-0.1101 | 1.1101 | 1-x |
原码的特点:简单、直观。但是用原码有如下问题:
4. 例题
3. 补码表示法
1. 补的概念
首先,以时钟为例解释补数的概念。如图:假设 逆时针为减法,顺时针为加法
现在,我们希望:分针由 6 指向 3,有两种实现方案
- 逆时针转动指针,转动3个单位,记作==-3==
- 顺时针转动指针,转动9个单位,记作==+9==
在这里,-3和==+9是等价的,记作 − 3 ≡ 9 ( m o d 12 ) -3 \equiv 9 \,(mod \,12) −3≡9(mod12),称+9是-3以12为模的补数==。
在这里,我们通过模,实现了用一个正数代表一个负数,实现了用加法替换减法
这里有两个结论:
- 一个负数加上“模”即得该负数的补数(正数)
- 一个正数和一个负数互为补数时, 它们绝对值之和即为 “模” 数
以计数器阐释补数的概念
2. 正数的补数即为其本身
在这里介绍了补数计算公式的原理
3. 补码定义
1. 整数
公式如下:
[ x ] 补 = { 0 , x 2 n > x ≥ 0 2 n + 1 + x 0 > x ≥ − 2 n ( m o d 2 n + 1 ) x 为 真 值 , n 为 整 数 的 位 数 [x]_补=\begin{cases} 0,x \qquad 2^n>x\geq0 \\ 2^{n+1}+x \quad 0>x\geq -2^n \quad(mod \, 2^{n+1})\end{cases} \qquad x为真值,n为整数的位数 [x]补={
0,x2n>x≥02n+1+x0>x≥−2n(mod2n+1)x为真值,n为整数的位数
2. 小数
公式如下:
[ x ] 补 = { x 1 > x ≥ 0 2 + x 0 > x ≥ − 1 ( m o d 2 ) x 为 真 值 [x]_补=\begin{cases} x \qquad 1>x\geq0 \\ 2+x \quad 0>x\geq-1 \quad (mod \, 2) \end{cases} \qquad x为真值 [x]补={
x1>x≥02+x0>x≥−1(mod2)x为真值
4. 求补码的快捷方式
正数的补码就是其本身,这里主要讲求负数补码的快捷方式
当真值为负时,补码的计算方法:
- 原码:除符号位外,其他每位取反
- 取反后,末位+1
如图
注意:补码定义公式是直接通过真值计算补码,而快捷求法是通过原码求补码
同时,当真值为负时,通过补码计算原码的方法:原码 可用 补码除符号位外 每位取反,末位加 1 求得
4. 反码表示法
1. 反码定义
1. 整数
[ x ] 反 = { 0 , x 2 n > x ≥ 0 ( 2 n + 1 − 1 ) + x 0 ≥ x > − 2 n ( m o d 2 n + 1 − 1 ) x 为 真 值 , n 为 整 数 的 位 数 [x]_反= \begin{cases} 0,x \qquad\quad\quad\quad 2^n>x \geq 0 \\ (2^{n+1}-1)+x \quad 0 \geq x>-2^n \quad (mod \, 2^{n+1}-1) \end{cases} \qquad x为真值,n为整数的位数 [x]反={ 0,x2n>x≥0(2n+1−1)+x0≥x>−2n(mod2n+1−1)x为真值,n为整数的位数
当真值为负数时,反码计算的快捷方式:原码除符号位外每位取反
2. 小数
[ x ] 反 = { x 1 > x ≥ 0 ( 2 − 2 − n + x ) 0 ≥ x > − 1 ( m o d 2 − 2 − n ) x 为 真 值 , n 为 小 数 的 位 数 [x]_反= \begin{cases} x \qquad\quad\quad 1>x \geq 0 \\ (2-2^{-n}+x) \quad 0 \geq x>-1 \quad (mod \, 2-2^{-n}) \end{cases} \qquad x为真值,n为小数的位数 [x]反={ x1>x≥0(2−2−n+x)0≥x>−1(mod2−2−n)x为真值,n为小数的位数
2. 例子
5. 原码、补码、反码小结
- 最高位为符号位,用指定符号将 数值部分 和 符号位 隔开
- 整数用 ,
- 小数用 .
- 对于正数:
- 原码 = 补码 = 反码
- 真值变原码:最左侧加符号位 0
- 对于负数,符号位为1,其数值部分
- 原码除符号位外每位取反,末位+1 ----> 补码
- 原码除符号位外每位取反 ----> 反码
补充一个小结论:二进制数,经过两轮取反末位+1操作,该二进制数是不变的。
例题
6. 移码表示法
为什么要采用移码?
原因在于使用补码难以直接比较数的大小,如下图:
1. 定义
公式如下:
x 移 = 2 n + x ( 2 n > x ≥ − 2 n ) x 为 真 值 , n 为 整 数 的 位 数 x_移=2^n+x \quad (2^n>x \geq -2^n) \qquad x为真值,n为整数的位数 x移=2n+x(2n>x≥−2n)x为真值,n为整数的位数
注意,移码只定义了整数。移码表示例子:
移码可以很方便的比较整数的大小,如下图:
2. 移码和补码的比较
3. 真值、补码和移码的对照表
4. 移码的特点
- 用移码表示浮点数的阶码(整数),能方便地判断浮点数的阶码大小
- [ + 0 移 ] = [ − 0 ] 移 [+0_移]=[-0]_移 [+0移]=[−0]移,即0的移码是唯一的:1,n个0
- 移码全0表示的是最小值== − ( 2 n − 1 ) -(2^{n-1}) −(2n−1)。全1时表示最大值 2 n − 1 2^n-1 2n−1==。如下图
二、数的定点表示和浮点表示
关于定点和浮点的概念
计算机中,没有为小数点设置专门的存储逻辑。小数点的位置是以约定的方式给出的。当约定小数点在某一指定点时,这就是定点表示。
1. 定点表示
依据约定小数点位置的不同,可以将计算机分成两种:小数定点机、整数定点机。如图
二者表示范围的比较
表示类型 | 小数定点机 | 整数定点机 | ||
---|---|---|---|---|
表示范围(二进制) | 表示范围(十进制) | 表示范围(二进制) | 表示范围(十进制) | |
原码 | 1.111...1 ~ 0.111...1 (n个1或0) | -(1- 2^(-n)) ~ +(1- 2^(-n)) | 1,111...1 ~ 0,111...1 (n个1或0) | -(2^n -1) ~ +(2^n -1) |
补码 | 1.000...0 ~ 0.111...1 (n个1或0) | -1 ~ +(1- 2^(-n)) | 1,000...0 ~ 0,111...1 (n个1或0) | -2^n ~ +(2^n -1) |
反码 | 0.000...0 ~ 1.111...1 (n个1或0) | -(1- 2^(-n)) ~ +(1- 2^(-n)) | 0,000...0 ~ 1,111...1 (n个1或0) | -(2^n -1) ~ +(2^n -1) |
2. 浮点表示
本节要解决的几个问题:
- 为什么在计算机中要引入浮点数表示
- 浮点表示的格式是什么
- 尾数和阶码的基值必须是2吗?基值的影响?
- 表数范围与精度和哪些因素有关
- 为什么要引入规格化表示
- 目前浮点数表示格式的标准是什么
为什么在计算机中要引入浮点数表示?
这是仅有定点数表示所拥有的缺陷:
- 编程困难,程序员要调节小数点的位置
- 数的表示范围小,为了能表示两个大小相差很大的数据,需要很长的机器字长
- 数据存储单元的利用率往往很低
1. 浮点数表示形式
浮点数的一般形式
N = S × r j S 尾 数 , j 阶 码 , r 尾 数 的 基 值 N=S \times r^j \qquad S\,尾数,j\,阶码,r\,尾数的基值 N=S×rjS尾数,j阶码,r尾数的基值
计算机中 r 取 2、4、8、16 等。如下例:
计算机中规定:(图中√标记的符合计算机要求)
- 尾数S 取纯小数(可正可负),并称尾数最高位为1的浮点数为规格化数(这里最高位指的是尾数的真值部分,即小数点后第1位)
- 阶码j 取整数(可正可负)
关于基数r 的理解
- 首先,我们以十进制作为切入点,我们知道 12138 = 1.2138 × 1 0 4 12138 = 1.2138\times10^4 12138=1.2138×104,此时:
- r = 10 , j = 4 r=10,j=4 r=10,j=4