C语言进阶之路(番外篇float的存储方式)

c语言进阶之路

Float的存储方式

 浮点型存储方式是根据IEEE(电子和电子协会) 754规定的,(-1)^S* M *2^E

符号位(Sign):S=0为正数,S=1为负数

指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储

尾数部分(Mantissa):1<= m >2

C语言进阶之路(番外篇float的存储方式)_第1张图片

列:

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------>转换乘二进制放入内存

放入内存中的样子
C语言进阶之路(番外篇float的存储方式)_第2张图片

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不就是微积分中极限吗哈哈哈哈

你可能感兴趣的:(c语言,c语言)