定点数的编码表示方法

1 无符号表示法

1.1 无符号表示法的特点

无符号表示法只能用于存储无符号整数,也就是正整数。

1.2 无符号表示法的存储步骤

无符号表示法存储步骤如下:

  1. 转换为二进制。
  2. 二进制位数不足n位的,左边(高位)补零。

举例:
在这里插入图片描述
在这里插入图片描述

复原就是存储步骤的逆运算。


2 符号加绝对值表示法(即原码,Sign and Magnitude)

2.1 符号加绝对值表示法的特点

在存储整数中并不常用,却通常用于存储模拟信号(存储音频的部分会用到)。

在这里插入图片描述
正号用0表示,负号用1表示,数值部分不变。

2.2 符号加绝对值表示法的存储步骤

符号加绝对值表示法的步骤如下:

  1. 将绝对值转换为二进制。
  2. 二进制位数不足n-1位的,左边(高位)补零。
  3. 加上符号位。

举例:
在这里插入图片描述
在这里插入图片描述
复原就是存储步骤的逆运算。

2.3 符号加绝对值表示法的缺点

符号加绝对值表示法虽然容易,但是具有如下缺点:

  • 0的表示不唯一,故不利于程序员编程。
  • 加、减运算方式不统一。
  • 需额外对符号位进行处理,故不利于硬件设计。
  • 特别当a < b时,实现a - b比较困难。

从50年代开始,整数都采用补码表示法,但浮点数的尾数用原码定点小数表示。


3 补码表示法(模运算,modular运算)

3.1 补码表示法的基本概念

重要概念: 在一个模运算系统中,一个数与它除以“模”后得余数等价。

现实世界中的模运算系统:时钟是一种模12系统。
在这里插入图片描述
我们可以得出如下结论:

  1. 一个负数的补码等于模减去该负数的绝对值。
  2. 对于某一确定的模,某数减去小于模的另一数,总可以用该数加上另一数负数的补码来代替。

这样通过补码(modular运算),我们就实现了+和-的统一。

补码的定义: 假设补码有n位,则[X]补 = 2 ^ n + X (-2 ^ (n-1) <= X < 2 ^ (n-1), mod 2 ^ n)。

3.2 如何取补码

取补码主要有如下两种方法:

取反加1:
在这里插入图片描述
通过如下的计算我们可以很清晰的看出为什么是取反加1:
在这里插入图片描述
从右边开始复制,直到复制第一个1然后其他位取反:
在这里插入图片描述

注: 将一个数连续取两次补码,最终得到原数。
在这里插入图片描述
求特殊数的补码:
在这里插入图片描述

3.3 补码表示法的存储步骤

无符号表示法的存储步骤如下:

  1. 将绝对值转换为二进制。
  2. 二进制位数不足n位的,左边(高位)补零。
  3. 如果要存储的整数是正数和0,则就这样存储;如果要存储的整数是负数,则取其补码进行存储。

举例:
在这里插入图片描述
在这里插入图片描述

3.4 补码表示法恢复原数的方式

理论做法:
在这里插入图片描述

实际上我们都是如果如下形式进行求补码的真值的:

规律:判断正负

  • 转换结果的最高位是0,则被转换的数为正数,数值部分相同。
  • 转换结果的最高位是1,则被转换的数为负数,数值各位取反,末位加1。

举例:
在这里插入图片描述


4 移码表示法(Excess biased notion)

4.1 移码表示法的概念

移码表示是指将每一个数值加上一个偏置常数(Excess/bias)。

4.2 移码表示法的操作方式

通常,当编码位数为n时,bias取2^(n-1)
或 2^(n-1) - 1(如IEEE754)。
在这里插入图片描述
(上图应该是当bias为2^(n-1) 时)

4.3 移码表示法的优点

使用移码表示法,便于浮点数加减时的对阶操作(比较大小)。

在这里插入图片描述


参考资料:

  1. 深度学习:C/C++、计算机体系
  2. 计算机系统基础(一):程序的表示、转换与链接
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值