快速了解IEEE754标准32位浮点数的转换
快速了解IEEE754标准32位浮点数的转换
IEEE754标准是计算机中表示浮点数的国际标准,广泛应用于各种计算设备中。本文将详细介绍IEEE754标准中32位浮点数的转换方法,帮助读者理解计算机如何存储和处理浮点数。
什么是IEEE754标准的32位浮点数
计算机存储的方式主要有两种,分别是定点数和浮点数。为了存储更多的位数,科学家们通过科学计数法创造了浮点数的存储方式。
需要记住的是,定点数存储的范围小,但是精确;浮点数存储的范围更大,但是不精确。
浮点数的表示
一个浮点数 (Value) 的表示可以这样表示:
这个要怎么理解呢,看上面那幅图十进制的1.75转化为二进制的表示。当然上面那幅图指数是二进制,实际上我们写的时候写成十进制可能更好去理解,那
十进制是 小数X10的几次方
二进制当然就是 小数X2的几次方
理解的方式自然也是一样的,乘上正数次方,小数点向右移动,乘上负数次方,小数点向左移动。
储存方式
我们有三十二位地址,也就是4byte(32bit)。IEEE754规定:在32位浮点数中,符号位为第一位,指数位是后面八位,小数位是后面的23位。
- 符号位:0为“+”,1为“-”
- 指数位(阶码):在 IEEE 754 浮点数标准中,阶码是用移码表示的,移码的定义是移码 = 真值 + 偏置值。在 IEEE 754 标准中,移码的偏置值是 2^(n-1)-1。因此,真正的指数可以表示为真正的指数 = 32位浮点数从前往后第二位到第九位的二进制数 - 2^(8-1)-1,即指数 = 八位阶数 - 127。
- 小数位(尾数):尾数码部分采用原码表示,且尾数码隐含了最高位 1,在计算时我们需要加上最高位1,即 1.M
IEEE754标准的32位浮点数的转换
接下来我们来看一个具体的实例:将IEEE754标准格式存储的十六进制浮点数转换成十进制的数值。
十六进制浮点数:41360000
首先,我们先把十六进制转化为2进制:
0 100 0001 0 011 0110 0000 0000 0000 0000
我们按照上面讲的,把32位浮点数划分为1、8、23,三组数字,然后一组一组看:
- 符号位:0,表示32位浮点数是一个正数
- 指数位(阶码):1000 0010,转化成十进制为130。注意,此时的130为移码,指数的真值为移码减去偏置值,即130 - 127 = 3
- 小数位(尾数):011 0110 0000 0000 0000 0000,因为尾数储存的时候省略了1,所以这个数应该看作1.011011
那么这个浮点数三个部分我们都知道了,组合起来就是这个数的十进制数值:
理解起来很简单,就是正数,二进制数乘上2的3次方,和科学计数法一样,正3次方,小数点往后移动三位就行,表示出来就是:
1011.011
转化为十进制:
= 11.375
所以11.375就是最终的结果。
十进制化为二进制浮点数表示就是把整体逻辑反过来了,这里就不举例子了。
特殊情况
形式 | 指数 | 小数部分 |
---|---|---|
零 | 0 | 0 |
非规约形式 | 0 | 非0 |
规约形式 | 1到 | 任意 |
无穷 | 0 | |
NaN | 非零 |