浮点数在电脑中如何存储的

根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成下面的形式

(-1)^S*M*2^E

-1^S表示符号位,当s=0,V表示正数,当s=1,V为负数

M表示有效数字,大于等于1,小于2

2^E表示指数位

什么意思呢?

例如:5.5

5在二进制中是101,而后面的.5是表示1,因为小数点后面的第一位是从2的负一次方开始算的,所以是101.1

按照科学计数法就表示成1.011*2^2

V=5.5

=1.011*2^2

=(-1)^0*1.011*2^2

S=0

M=1.011(换成科学计算法后的二进制数)

E=2   (这里是换算成科学计数法后原本的数向前移动了几位)

在32位的机器float的存储

s E E E E E E E E M                                            

s(1bit) E(8bit)M(23bit)

在64位的机器float的存储

S E E E E E E E E E E E M                                                                                                      

s(1bit) E(11bit)M(52bit)

M有特定的规定

取值范围是1<=M<2, M也可以写成1.XXXX的形式,其中XXXX表示的是小数

在计算机中保持M的值的时候,默认第一位都是1,因此是可以舍弃的,只保存小数点后面的数,当读取的时候,在加回原来的1就可以了,这样留给M的空间就有23/52位

E为无符号整数,如果是8bit取值范围为0-255,11bit取值范围为0-2047,但是在科学计数法中E是可以出现负数的,在存入内存中E的真实值必须加上一个中间数,对于8位的E,中间值数127,对于11位的E中间值的1023

例如:2^10中E是10,在32位浮点数时,保存的是10+127=137,转换二进制是10001001

 

指数E在内存中取出分为3种情况

 E不全为0或不全为1

指数E减去127/1023得到真实值,再加上有效数字M前加上第一位的1

E全为1

有效数字M全为0,表示浮点数表示的数字非常大

E全为0

浮点数的指数E等于1-127/1-1023即为真实值,有效数字M不需要加上第一位的1

 

posted @ 2024-09-02 14:12  油头男孩  阅读(8)  评论(0编辑  收藏  举报