浮点数在计算机中的二进制表示(IEEE 754 标准)
十进制,二进制转换相关知识参考:
http://www.cnblogs.com/xkfz007/articles/2590472.html
原码,反码,补码,移码相关知识参考:
https://blog.****.net/xdd19910505/article/details/40424533
想知道浮点数在计算机中的二进制表示,先让我们了解一下浮点数是怎么用十进制表示的。
浮点数的十进制表示一般使用的是科学计数法。
科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相乘的形式(1≤a<10,n为整数),这种记数法叫做科学记数法。
如:
当然上面使用的都是十进制的科学计数法,而在计算机中使用的是二进制的科学计算法。
上面的等式转换为二进制表示如下:
好了,现在大家知道浮点数是怎么用二进制科学计数法表示的了,下面我们再来看看浮点数在计算机中的二进制表示。
我们先来看张图:
如图所示,即浮点数在计算机内的 IEEE 754 标准小端序的数据存储格式,可以分为三部分——数符,阶码和尾数。
各部分占位如下:
S(数符) | E(阶码) | M(尾数) | 总长 | |
float | 1 | 8 | 23 | 32 |
double | 1 | 11 | 52 | 64 |
数符,阶码和尾数具体是什么呢?我们再来看张图:
上面的公式就是浮点数的真值公式,我们来对应之前的数据存储格式(数符,阶码和尾数)解释一下:
S(数符):表示浮点数的正负,0为正,1为负。
M(尾数):表示转换到标准二进制科学计数法后的小数部分。因为转换为标准计数法后整数部分永远是1,所以可以省略。
E(阶码):表示处理过的二进制科学计数法的幂次方。这里e代表原幂次方,E(阶码)在这里的处理是:
(n为阶码的位数)
即:
float:E = e + 127
double:E = e + 1023
还是拿上面的例子来说(使用单精度浮点数 float):
所以:
S = 0
E = e + 127 = 10 + 127 = 137 = 10001001
M = 00110100101000000000000 (后面补 0 凑够 23 位)
将 S、E、M 拼起来即为 1234.5 在计算机中的二进制表示 01000100 10011010 01010000 00000000。
至此,我们就了解了浮点数在计算机中的二进制表示。