学习笔记——计算机组成原理第二章定点数的表示和运算

定点数的表示和运算

    • 一、定点数的表示
      • 1.无符号数和有符号数的表示
      • 2.机器数的定点表示
        • (1)定点小数
        • (2)定点整数
      • 3.原码、补码、反码、移码
        • (1)原码
        • (2)补码
        • (3)反码
        • (4)移码
    • 二、定点数的运算
      • 1.移位运算
        • (1)逻辑移位
        • (2)算术移位
        • (3)循环移位
      • 2.加减运算
      • 3.符号扩展
        • (1)先求原码,再求补码
        • (2)先求补码,再补位
      • 4.溢出
        • (1)采用采用一位符号位
        • (2)采用采用一位符号位和数据为的进位
        • (3)双符号位
      • 5.定点数乘法运算
        • (1)原码一位乘法
        • (2)补码一位乘法(Booth算法)
      • 6.定点数除法
        • (1)不恢复余数除法
        • (2)补码除法运算(加减交替法)



一、定点数的表示

1.无符号数和有符号数的表示

  • 无符号数:就是所有位数都是数值位。
  • 有符号数:简单理解在机器中,数的正负号无法识别,取一位为符号位,其他为数值位。

2.机器数的定点表示

(1)定点小数

  就是纯小数,约定小数点位置在符号位之后,有效值部分最高位之前。数值有效部分也被称为尾数

x0 隐含小数点 x1 x~2 xn
  • 当 x0=0,x1 ~ xn 均为1 时,X为其中能表达的最大正数,真值为1-2-n
  • 当 x0=1,x1 ~ xn 均为1 时,X为其原码能表达的最小负数,真值为-(1-2-n)。

(2)定点整数

  就是纯整数,约定小数点位置在有效数值部分最低位之后。

x0 x1 x~2 xn 隐含小数点
  • 当 x0=0,x1 ~ xn 均为1 时,X为其中能表达的最大正数,真值为2n-1。
  • 当 x0=1,x1 ~ xn 均为1 时,X为其原码能表达的最小负数数,真值为-(2n-1)。

3.原码、补码、反码、移码

(1)原码

  • 直接十进制转二进制,前面加符号位即可。
  • 原码的零有两种表示方式 一个是0000,另外一种是1000。

(2)补码

  • 正数就等于原码
  • 负数为符号位不变,数值位取反加一
  • 负数补码数值位取反加一也可以求得原码
  • 真值0的补码表示方式是唯一的

(3)反码

  • 正数仍然等于原码
  • 负数直接原码取反
  • 真值0的反码不唯一

(4)移码

  • 只有整数才有移码
  • 移码就是补码的符号位取反,数值位不变
  • 真值0的移码唯一
  • 移码全为0时对应真值最小值-2n;移码全为1时,对应真值的最大值2n-1;
  • 移码保持了数据原有大小,移码大则真值大。



二、定点数的运算

1.移位运算

(1)逻辑移位

  • 就是无符号数移位,原码、补码、反码左移右移都是添加0

(2)算术移位

  • 正数,不论原码、补码、反码,左右移动都是添0
  • 负数
    原码:左右移动都添加0
    补码:左移添加0,右移添加1
    反码:左右移动都是添加1

(3)循环移位

  • 不丢数,循环移位

2.加减运算

  • 主要在于补码的计算
  • [A+B]=[A]+[B]
  • [A-B]=[A]+[-B]
  • [-B]=[B]连同符号位一起取反加1。

3.符号扩展

假设机器字长8位,A=15,B=-24求补码的符号扩展。

(1)先求原码,再求补码

  • [A]=00001111。
  • [B]=10011000取反加1=11101000。

(2)先求补码,再补位

  • [A]=1111,正数补0,所以为00001111。
  • [B]=11000取反加1=00111+1=01000,负数补0,所以为11101000。

4.溢出

小于最小数为下溢,大于最大值为上溢。两种情况会出现 溢出。

  • 符号相同的数相加。
  • 符号不同的数相减。

(1)采用采用一位符号位

  • As、Bs分别为原来两个数的符号位,S为运算结果的符号位。
    V=AsBs S ‾ \overline{S} S+ A ‾ \overline{A} A B ‾ \overline{B} BS。
  • V=0,无溢出。
    V=1,数据溢出。

(2)采用采用一位符号位和数据为的进位

  • 进位和符号位如果求异或的结果为0则不溢出,为1则溢出。

(3)双符号位

  • 双符号位S1S2求异或。
  • 为0无溢出,为1则溢出。
  • S1S2=01为正溢出,S1S2=10为负溢出。

5.定点数乘法运算

(1)原码一位乘法

  • 例如x=-0.1101,y=0.1011,求x乘y
    首先符号位和数值位分开算,符号为显然为1
      00.0000        00000 1011
      00.1101
      ———
      00.1101
      00.0110   右移   00110 1101 | 1
      00.1101
      ———
      01.0011
      00.1001   右移   01001 1110 | 11
      00.0100   右移   00100 1111 |011
      00.1101
      ———
      01.0001
      00.1000   右移   01000 1111 | 1011
    所以乘积为-0.10001111

  • 最开始是从00000开始算

  • 双符号运算

  • 右移将除数全部移出为结束

  • 运算次数和右移次数一样

(2)补码一位乘法(Booth算法)

  • 例如x=-0.1101,y=0.1011,求x乘y
    需要带上符号运算
    [x]=11.0011   [y]=00.1011
    [-x]=00.1101
    乘数后面补0跟双符号数一样
      00.0000        010110
      00.1101
      ———
      00.1101
      00.0110   右移   101011| 0
      00.0000
      ———
      00.0110
      00.0011   右移   010101 | 10
      11.0011
      ———
      11.0110
      11.1011   右移   001010 | 110
      00.1101
      ———
      00.1000
      00.0100   右移   000101 | 0110
      11.0011
      ———
      11.0111
    所以[x*y]=11.01110001 得[xy]=11.10001111,xy=-0.10001111

  • 出现符号位11的情况,右移补1

  • 运算次数比右移次数多一

    • 到4个数字移出去的时候,再作一次运算结束。
  • 看后两位,最后一位减前一位的值
    如果为0,则加0
    如果为1,则加[x]
    如果为-1,则加[-x]

6.定点数除法

  • 计算 X / Y X/Y X/Y

(1)不恢复余数除法

  • 符号位单独求
  • 采用单符号位
  • [ ∣ y ∣ ] 补 和 [ − ∣ y ∣ ] 补 [|y|]_{补}和[- |y|]_{补} [y][y]
  • 从被除数开始加,首先加 [ − ∣ y ∣ ] 补 [- |y|]_{补} [y]
  • 计算完之后,部分余数为负,商上0
    部分余数为正,商上1,然后商和部分余数都左移
  • 结束标志:商的第一位移动到最高位

(2)补码除法运算(加减交替法)

  • 符号位参加运算
  • 双符号位
  • [ y ] 补 和 [ − y ] 补 [y]_{补}和[-y]_{补} [y][y]
  • 从被除数开始加,先看 [ x ] 补 和 [ y ] 补 [x]_{补}和[y]_{补} [x][y]是否异号,异号加 [ y ] 补 同 号 加 [ − y ] 补 [y]_{补}同号加[-y]_{补} [y][y]
  • 计算之后判断部分余数是否和 [ y ] 补 [y]_{补} [y]异号,异号加 [ y ] 补 同 号 加 [ − y ] 补 [y]_{补}同号加[-y]_{补} [y][y]
  • 然后部分余数和商左移
  • 结束标志:商的第一位移动到符号位
  • 商最后一位恒置1

你可能感兴趣的:(计算机组成原理)