c语言进阶之路
Float的存储方式
浮点型存储方式是根据IEEE(电子和电子协会) 754规定的,(-1)^S* M *2^E
符号位(Sign):S=0为正数,S=1为负数
指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
尾数部分(Mantissa):1<= m >2
列:
float a =5.5//的储存方式
转换2进制为101.1
符号s=0
尾数m=1.011
指数e(101.1—>1.001移了多少位)=2
M和E的存储方式有不同
因为1<= M<2,每次都有1,为了精度更高舍弃它,拿出来在补回去
E是无符的,8位时候取值范围0~255
应为E可能是负数 列:0.5---->0.1(这个是二进制-1)==2^-1=2/1---->(-1) ^0 *1.0 *2^-1 ----->e=e+127储存存进
所以IEEE规定E存储时要加一个中间值8位的中间值为127
M=011------>自动补齐20个0
E=127+2=129------>转换乘二进制放入内存
放入内存中的样子
float取出
float取出的结果
1:E不为全0也不为全1:
取出 E-128=E
依旧以5.5为例子
E=129-128=2
M拿出来补1
M=1.011
(-1)^S*M *2^E------>者就是取出的结果
2:E为全0,1
如果全0的时候那么E存进去是多少8位的中间值是127 E+127=0那么E==-127
2^-127次方你自己算算这个数字
所以IEE给出为0
那么全1也同理得出,全1就表示他是无穷大(正负取符号位)
全0和全1不就是微积分中极限吗哈哈哈哈
版权归原作者 一个正直的男孩 所有, 如有侵权,请联系我们删除。