IEEE浮点数 换算方法【超易懂详解】
格式概览
举个例子,十进制的 0.15625 用 32位 IEEE浮点数 格式表示的话就是下面图片中左边方格中的这一串数。
这样做,比起其他表示方法来说,有非常多的优点。网上有不少文章做了对比,有兴趣可以了解一下。
那么一个十进制数怎么变成这样的呢。
转换方法
0. 例子说明
这里以 3.625 作为例子。
你只需在心中默念 1 2 3 4,它就能变成下面这样
1. 小学乘除:十进制 转 二进制
第一步是将这个数从十进制转为二进制。
3.625 ( 10 ) = 11.101 ( 2 ) 3.625(10) = 11.101(2) 3.625(10)=11.101(2)
注:(10)代表当前数是十进制,(2)代表二进制。
如果你不知道如何手算十进制转二进制,那可以借助在线转换工具,或者用电脑自带的计算器.
2. 小学数学:科学计数法
第二步是使用幼儿园就教过科学计数法:
整数位只保留一位有效数字(没有任何有效数字的情况就是非常简单的0了)。
11.101 ( 2 ) = 1.1101 ( 2 ) ∗ 2 1 ( 10 ) 11.101(2) = 1.1101(2) * 2 ^ {1}(10) 11.101(2)=1.1101(2)∗21(10)
注:等号右边的1.1101是二进制表示法,而2^1是十进制表示法。两种混用了,这是为了方便理解。如果都用二进制表示法的话写作下面这样(都是二进制就不用标括号了):
11.101 = 1.1101 ∗ 1 0 1 11.101 = 1.1101 * 10 ^ {1} 11.101=1.1101∗101
3. 儿童观察力:提取三个元素
我们接下来要用到分辨男女卫生间的观察力
来观察一下这张图:
图中将IEEE浮点数用三种颜色标示出三个关键元素:
元素 | 含义 | 详解 |
---|---|---|
(蓝色)sign | 符号 | 0代表当前数为正数,1代表当前数为负数(在这个例子中是0) |
(绿色)exponent | 指数 | 科学计数法的指数加上 2 k − 1 − 1 2^{k-1}-1 2k−1−1后转为二进制表示(k代表IEEE浮点数为指数部分预留的位数,这里是8-bit,故k=8) |
(红色)fraction | 小数 | 科学计数法中数字部分的小数部分(比如这里是1.1101的1101) |
经过上面两步,我们得到的数是
1.1101 ( 2 ) ∗ 2 1 ( 10 ) 1.1101(2) * 2 ^ {1}(10) 1.1101(2)∗21(10)
那么提取出的三个关键元素就是
符 号 : 0 符号:0 符号:0
指 数 : 1 + ( 2 8 − 1 − 1 ) = 1 + 127 = 128 ( 10 ) = 10000000 ( 2 ) 指数: 1+(2^{8-1}-1)=1+127=128(10)=10000000(2) 指数:1+(28−1−1)=1+127=128(10)=10000000(2)
小
数
:
1101
小数:1101
小数:1101
4. 幼儿手工:收尾拼接
经过上面的步骤之后,答案呼之欲出
符号:0
指数:10000000
小数:1101
合成得到:
01000000011010000000000000000000
01000000011010000000000000000000
01000000011010000000000000000000
或者用我们的图片来表示:
附录
-
想要自己练习一下的话可以用这个网站对一下自己的答案是否正确:IEEE浮点数在线转换
-
IEEE754浮点数标准
-
【参考链接】