根据IEEE 754标准实现十进制和二进制的转换

根据IEEE 754标准实现十进制和二进制的转换

  • 什么是IEEE 754
  • 根据IEEE 754将十进制转换为二进制
    • 十进制浮点型转换为二进制浮点型:
    • IEEE 754的基本格局
    • 转换规则
      • 第1位符号位(S)
      • 第2~9位指数位(E)
      • 第10~32位尾数位
  • 结果
    • 有限小数
    • 无限小数
  • IEEE 754的意义

在文章开始之前,为大家推荐一款十进制和二进制根据IEEE 754的转换工具,希望可以帮助各位学习IEEE 754。

什么是IEEE 754

IEEE 754标准是由IEEE制定的,它最早发布于1985年,目的是为了统一浮点数的表示和运算规则,以便不同计算机系统之间可以互相兼容。该标准定义了浮点数的表示形式、运算规则和舍入方式,以及特殊值(如无穷大、NaN等)的处理方式。

根据IEEE 754将十进制转换为二进制

十进制浮点型转换为二进制浮点型:

首先我们要知道怎么将十进制的浮点型转换成二进制的浮点型
我们以25.75为例

  1. 整数部分:25转换成二进制
    做连续的除法/2直到最后为0,然后倒写余数
    根据IEEE 754标准实现十进制和二进制的转换_第1张图片

  2. 小数部分:0.75转换成二进制
    将小数部分*2连乘,提取出每一次的整数部分,直到小数部分最后为0,然后正写整数部分。
    根据IEEE 754标准实现十进制和二进制的转换_第2张图片
    所以我们得到的二进制小数是11001.11

我们接下来的任务就是将这个二进制小数以IEEE 754标准改写二进制小数

IEEE 754的基本格局

IEEE 754标准主要包括两种浮点数格式:float单精度浮点型(4字节=32位)和double双精度浮点型(8字节=64位)。
单精度浮点数由1位符号位(sign)、8位指数位(Exponent)和23位尾数(Mantissa)位组成。
双精度浮点数由1位符号位(sign)、11位指数位(Exponent)和52位尾数位(Mantissa)组成。
因为两种浮点型的表示规则相似,我们以较为简单的float(单精度浮点数)为例:

  1. 符号位(S):1位,0表示正数,1表示负数
  2. 指数位(E):8位,使用移码表示
  3. 尾数位(M):23位,二进制小数形式表示

以上三个部分是相对独立的,我们在转换和阅读的时候也必须分开。
我们以下面的表格表示32位的float单精度浮点型位数和顺序:

S E(8位) M(23位)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

转换规则

第1位符号位(S)

正数的符号位为0,负数的符号位为1。
首先,判断该浮点数是正数还是负数。
我们举例的25.75是正数,所以符号位位0。

第2~9位指数位(E)

这里我们参考科学计数法,要用指数位将小数点移到第一二位之间。
对于11001.11(25.75)而言,只需要将小数点向左移4位就可以,也就是说指数位是4。

  • 可是这里有一个问题,8位的指数位只能代表正数,在这个例子上应该没问题,可是如果遇到-4该怎么办呢?
  • IEEE 754给出的答案是我们以01111111(十进制的127)为0,也就是是如果我们要表示4,实际的指数位应该4+127=131,那么指数位应当10000011
  • 在这里我们将127定义为偏移值

我们可以使用就将25.75转换为了1.100111*(2^4)。
这里我们得到了前面的9位数字:0 10000011

第10~32位尾数位

对于1.100111*(2^4)来说,我们为了拓宽float的表达范围,因为整数部分始终为1,我们只需要表达小数部分100111,然后只需要将之后的每一位都补0。最后尾数位是10011100000000000000000。

结果

有限小数

根据IEEE 754标准实现十进制和二进制的转换_第3张图片

无限小数

根据IEEE 754标准实现十进制和二进制的转换_第4张图片
我们可以发现最后的实际值不是准确值,是因为二进制无法准确的表示该十进制值,所以只能在最大程度上用近似值去表达。

IEEE 754的意义

IEEE 754标准在计算机科学和工程领域得到了广泛的应用,几乎所有现代的计算机系统都采用了IEEE 754标准来表示和处理浮点数。它为不同计算机系统之间的数据交换和计算结果的一致性提供了基础,同时也为软件开发者提供了一致的浮点数运算规则,一定程度上避免了因为浮点数表示和运算规则不一致而导致的错误。

你可能感兴趣的:(计算机科学,学习心得,学习)