一、引言
上期我们讲到数据的存储,那很多同学就对单精度浮点数与双精度浮点数有疑问了,正负号用最前头的二进制位充当符号位,那单精度浮点数和双精度浮点数又是哪一位二进制位充当充当小数点位又是如何通过二进制存储小数以及为什么单精度浮点数和双精度浮点数存储时内存数据会发生部分丢失。首先我们书接上回大小端,大小端分为大端字节序列、小端字节序列。
大端字节序列:将数据高位字节存储到低位字节,将数据低位字节存储到低位字节。
小端字节序列:将数据高位字节存储到高位字节,将数据低位字节存储到低位字节。
众所周知,变量的内存的地址是由高到低的 ,数组则恰恰相反,内存的地址是由低到高的。
通俗一点来讲就是字节顺序顺反的处理方式。
二、单精度浮点数与双进度浮点数在通过二进制表示
同学们可以自己结合自己编译器调试功能的内存来查看。同学们肯定都使用过科学计数法使数据的表达更加简洁明了。单精度浮点数和双精度浮点数就是以科学计数法方式存储单精度浮点数和双精度浮点数。我们用科学计数法表示十进制数字时,表示形式为:a X 10^n(0<a<10)。那我们推而广之,单精度浮点数和双精度浮点数的二进制表示形式为:a X 2^n (0<a<2)。
三、单精度浮点数与双精度浮点数在内存中的存储方式
单精度浮点数与双精度浮点数在内存中二进制中存储:
存储形式:V=(-1)^S X 2^E X M(为了方便大家看得懂所以John将2^E与M调换)
为了方便保存E会加上中间值一般单精度浮点数(float)加上127,double(双精度浮点数)会加上1023,毕竟E为负数,没有加上中间值就不好表示,中间值为E的最大值除以二。
在计算机内存二进制里表示形式为:
第一位二进制位表示正负号(对应上述的S)
第二位二进制位到第九位二进制位表示二进制的权重(对应上述的E)
第十位二进制位到第三十二位二进制表示二进制位经过科学计数法的第一操作数(对应上述的M)