Featured image of post 定点数

定点数

定点数

定点数:小数点的位置固定——常规计数

浮点数:小数点的位置不固定—科学计数法

无符号数

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

  • n位无符号数的表示范围:0~2n-1
  • 通常只讨论无符号整数
  • 通常表示指针、地址

有符号数

可以用原码、补码、反码三种方式来表示定点整数和顶点小数。还可用移码表示定点整数

  • 定点整数数的小数点约定在数的最右边
  • 将最高位理解为负权重(-2n),其余位为正权重(+2n-i)

image-20220403170323580

原码

image-20220910142256749

  • 一般用于表示浮点数的尾数 x

反码

  • 正数的反码=原码

  • 若符号位为0,则反码与原码相同

  • 若符号位为1,则数值位全部取反

注意:反码只是原码转为补码的中间状态

补码

正数的补码=原码

负数的补码 = 反码末位+1(要考虑进位)

  • 将负数补码转回原码的方法一样:尾数取反,末位+1(注意进位)

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

移码

在补码的基础上将符号位取反(移码只能用于表示整数)

image-20220403183145873

特殊值表示

有符号数-1:位全1,可以辅助快速运算补码的十进制表示

无符号数最大值:位全1

数位扩展

对于无符号数与有符号正数:高位全部添0

对于有符号负数:高位全部添1

加减运算

  • 加法正常运算
  • 减法则将减数转换为补码与被减数相加即可完成减法运算,所以在ALU中只设计加法器节省硬件成本

注意:执行加法操作时,符号位一起参与运算

移位运算

算数移位

​ 移位:通过改变各个数码位和小数点的相对位置,从而改变各数码位的位权。可用移位运算实现乘法、除法

原码

符号位保持不变,仅对数值位进行移位。

  • 右移:高位补0,低位舍弃,若舍弃的位=0,则相当于/2;若舍弃的位不等于0,则会丢失精度
  • 左移:低位补0,高位舍弃,若舍弃的位=0,则相当于x2;若舍弃的位不等于0,则会出现严重误差

反码

正数反码的移位运算与原码相同,负数反码的规则如下

  • 右移:高位补1,低位舍弃
  • 左移:低位补1,高位舍弃

补码

正数补码的移位运算与原码相同

负数补码的移位运算:

  • 右移(同反码):高位补1,低位舍弃
  • 左移(同原码):低位补0,高位舍弃

image-20220403203042199

逻辑移位

可以看作是对无符号数的“算数移位”

  • 右移:高位补0,低位舍弃

  • 左移:低位补0,高位舍弃

循环移位

  • 对于循环右移则同理

    image-20221103164531048

加减运算

一般采用补码的加减运算

  • 正数+整数才可能发生上溢–正+正=负
  • 负数+负数才可能发生下溢—负+负=正

溢出判断:

方法一:设A的符号为As,B的符号为Bs,运算结果的符号为Ss,则溢出逻辑表达式为:$$V=A_sB_s\overline S_s+\overline A_s\overline B_sS_s$$

  • 若V=0,表示无溢出;
  • 若V=1,表示有溢出

​ 方法二:采用一位符号位,根据数据位进位情况判断溢出符号位的进位Cs,最高数值位的进位Cs

符号位进位Cs 最高数值位进位Cs
上溢 0 1
下溢 1 0

即:Cs与Cs不同时有溢出

对Cs与Cs进行异或运算,设V为两者异或结果

  • 若V=0,表示无溢出
  • 若V=1,表示有溢出

方法三:双符号位法,正数符号位为00,负数符号位为11

加法运算后,双符号位=01则发生上溢;若双符号位=10则发生下溢,若两个符号位相同则未发生溢出。

image-20220404152735733

乘法运算

原码乘法运算

判断—-加法—-右移

  • 符号单独处理:符号位=$X_s\oplus Y_s$
  • 数值位取绝对值进行乘法运算

实现:

  1. 判断乘数最低位是否为1,是则与乘积(初值为0)累加,否则不累加
  2. 进位位,乘积位ACC,乘数MQ同时右移
  3. 重复上述步骤

image-20221103164642870

  • 在逻辑右移的时候,ACC中的最低位会移到MQ中的最高位,在ACC中补0,MQ的最低位直接丢弃。

  • 乘积高位:由ACC中不断的累加进位形成

  • 乘积低位:由运算过程中不断地右移部分积到MQ中形成image-20220404161811822

补码乘法运算

image-20220404153318961

  • 符号位参与运算
  • 补码一位乘法必须采用双符号位补码表示法
  • 移位采用的是算术右移(符号位是啥就补啥)

除法运算

原码除法

image-20220404165229290

  • 计算机默认上商1,如果不应该商1则改为商0,并“恢复余数”
  • ACC与MQ移位采用逻辑左移
  • 求余数:(ACC)-(除数)->ACC,即(ACC)+[-|y|]->ACC
  • 符号位单独通过两个符号位异或进行判断

image-20220404170141811

不恢复余数的方法

​ 将负余数记为a,将a加上除数b得结果a+b,将a+b逻辑左移并减去b

上述语句可表达为(a+b)*2-b= 2 *a+b

image-20220404170737047

  • 基于上述优化方法进行的原码除法又称加减交替法

  • 恢复余数法:当余数为负时商0,并+|除数|,再左移,再-除数

  • 加减交替法:当余数为负时商0,并左移,再加|除数|

补码除法

  • 符号位参与运算
  • 被除数/余数、除数均采用双符号位

​ 余数和除数同号,商1,余数左移一位减去除数;

​ 余数和除数异号,商0,余数左移一位加上除数;

注意:末位商恒置为1,精度误差不超过2^-n^,好处是省事,硬件电路设计更精简。

image-20220404171936170

总有些事情高于其他
Built with Hugo
主题 StackJimmy 设计
本站访客数人次 总访问量 本文阅读量