锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

计算机的运算方法——第六章

时间:2022-09-28 19:30:00 jy131变送器

计算机操作方法-第六章

    • 一、无符号数和有符号数
      • 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]={ 0x2n>x02nx0x>2nxn

对于 2 n − x 2^n-x 2nx的解释:数值部分位数为 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>x01x0x>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,有两种实现方案

  1. 逆时针转动指针,转动3个单位,记作==-3==
  2. 顺时针转动指针,转动9个单位,记作==+9==

在这里,-3和==+9等价的,记作 − 3 ≡ 9   ( m o d   12 ) -3 \equiv 9 \,(mod \,12) 39(mod12),称+9是-3以12为模的补数==。

在这里,我们通过模,实现了用一个正数代表一个负数,实现了用加法替换减法

这里有两个结论:

  1. 一个负数加上“模”即得该负数的补数(正数)
  2. 一个正数和一个负数互为补数时, 它们绝对值之和即为 “模” 数

以计数器阐释补数的概念

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]={ 0x2n>x02n+1+x0>x2n(mod2n+1)xn

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>x02+x0>x1(mod2)x

4. 求补码的快捷方式

正数的补码就是其本身,这里主要讲求负数补码的快捷方式

当真值为负时,补码的计算方法:

  1. 原码除符号位外,其他每位取反
  2. 取反后,末位+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]={ 0x2n>x0(2n+11)+x0x>2n(mod2n+11)xn

当真值为负数时,反码计算的快捷方式:原码除符号位外每位取反

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>x0(22n+x)0x>1(mod22n)xn

2. 例子

5. 原码、补码、反码小结

  1. 最高位符号位,用指定符号将 数值部分 和 符号位 隔开
    • 整数用 ,
    • 小数用 .
  2. 对于正数:
    • 原码 = 补码 = 反码
    • 真值变原码:最左侧加符号位 0
  3. 对于负数,符号位为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>x2n)xn
注意,移码只定义了整数。移码表示例子:

移码可以很方便的比较整数的大小,如下图:

2. 移码和补码的比较

3. 真值、补码和移码的对照表

4. 移码的特点
  1. 用移码表示浮点数的阶码(整数),能方便地判断浮点数的阶码大小
  2. [ + 0 移 ] = [ − 0 ] 移 [+0_移]=[-0]_移 [+0]=[0],即0的移码是唯一的:1,n个0
  3. 移码全0表示的是最小值== − ( 2 n − 1 ) -(2^{n-1}) (2n1)。全1时表示最大值 2 n − 1 2^n-1 2n1==。如下图

二、数的定点表示和浮点表示

关于定点和浮点的概念

计算机中,没有为小数点设置专门的存储逻辑。小数点的位置是以约定的方式给出的。当约定小数点在某一指定点时,这就是定点表示。

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. 浮点表示

本节要解决的几个问题:

  1. 为什么在计算机中要引入浮点数表示
  2. 浮点表示的格式是什么
  3. 尾数和阶码的基值必须是2吗?基值的影响?
  4. 表数范围与精度和哪些因素有关
  5. 为什么要引入规格化表示
  6. 目前浮点数表示格式的标准是什么

为什么在计算机中要引入浮点数表示?

这是仅有定点数表示所拥有的缺陷:

  • 编程困难,程序员要调节小数点的位置
  • 数的表示范围小,为了能表示两个大小相差很大的数据,需要很长的机器字长
  • 数据存储单元的利用率往往很低

1. 浮点数表示形式

浮点数的一般形式

N = S × r j S   尾 数 , j   阶 码 , r   尾 数 的 基 值 N=S \times r^j \qquad S\,尾数,j\,阶码,r\,尾数的基值 N=S×rjSjr

计算机中 r 取 2、4、8、16 等。如下例:

计算机中规定:(图中√标记的符合计算机要求)

  1. 尾数S 取纯小数(可正可负),并称尾数最高位为1的浮点数为规格化数(这里最高位指的是尾数的真值部分,即小数点后第1位
  2. 阶码j 取整数(可正可负)

关于基数r 的理解

  • 首先,我们以十进制作为切入点,我们知道 12138 = 1.2138 × 1 0 4 12138 = 1.2138\times10^4 12138=1.2138×104,此时:
    1. r = 10 , j = 4 r=10,j=4 r=10,j=4

相关文章