计算机底层中的IEEE浮点数表示
IEEE标准中浮点数用形如V = (-1)s x M x 2E的格式表示一个小数:
s☞符号位,s=1代表负数,s=0代表正数。
M☞尾数,代表小数点之后的数。
E☞阶数,对刚才的小数进行加权,权重是2的E次幂。
位表示
所以整个浮点数的二进制表示形式由3个部分组成:1位的符号段(s)+ k位的阶码段 + n位的小数字段。
说明:在32位单精度表示中,k=8, n=23;在64位双精度表示中,k=11, n=52;
类别
根据阶码段的值,浮点数可以分为3种不同的情况:
1.规格化的值
1.1阶码E
这是最普遍的,就是阶码段即非全0,也非全1。此时阶码字段被解读为以偏置(biased)形式表示的有符号整数,即E = e - Bias。此处的e代表阶码段的无符号二进制数,而Bias = 2(k-1) -1,(单精度是127,双精度是1023)。
1.2尾数M
此处尾数定义为M = 1 + f,f表示小数字段。此处隐含以1开头的尾数表示,因此我们可以把M看成一个二进制表达式为1.******的数字。
2.非规格化的值
2.1阶码E
当阶码段全为0时,所表示的就是非规格化的数字。此时,不同于规格化形式,阶码值E = 1 - Bias,而Bias仍然为 2(k-1) -1。
2.2尾数M
不同于规格化形式,尾数M = f,这就是小数字段不包含隐含的1了。
非规格化的数一般用来表示那些非常接近于0的小数。而且也可以用来表示0,即阶码段和小数段全为0。
3.特殊的值
3.1无穷大的值
当阶码段全为1,且小数段全为0时,得到的值表示无穷大,当符号段为1代表负无穷,符号段为0代表正无穷。一般用在表示两个很大的数相乘,结果溢出或零除时。
3.2不是值(NaN)
当阶码段全为1,且小数段非全0时,结果被称为NaN(Not a Number),一般表示一些非法运算。如对负数开根号或无穷数的相互运算时。
3.示例
下图表示了8位浮点格式的非负值,且符号段占1位,阶码段占4位,小数段3位,偏置量Bias为23 - 1 =7。
更多知识:
***点击关注专题:***嵌入式Linux&ARM
***点击关注CSDN专题:***Leon_Geo的博客
***或浏览器打开:***https://www.jianshu.com/c/42d33cadb1c1
ps://www.jianshu.com/c/42d33cadb1c1