在C语言中,浮点型数据分为:单精度(float),双精度(double)
float 占4字节(32bit);
double 占8字节(64bit);
无论是单精度或双精度的浮点数储都存分为三部分:
- 符号位(S):S可以为0或1,用来储存浮点数的正负值;
- 指数位(E):科学计数法后的指数部分;
- 尾数部分(M):移位存储的位数部分;
注意:一个进制浮点数V可以表示为:V = (-1) ^ S * M * E
- S:S = 0时,V为正数,S = 1时,V为负数;
- E:因科学计数法的指数会有负数,如-1,所以存储时需要加上当前大小的中间值;
E 为8bit时,其范围为0~255,中间值为127;
E 为11bit时,其范围为0~2046,中间值为1024;
- M:数值范围为(1 <= M < 2),因此默认M的第一位一直时1,先舍弃第一位,保留其余小数部分,读取时在加回来;
对于从内存中取出储存的浮点数可分为三种情况:
(1)E全为0,表示E = -127,M此时值不为1,为了更贴近真实值(接近0)M第一位刚刚舍去的值应为0;
(2)E全为1,表示无穷大的数,数值正负由S决定;
(3)E中有1有0,需先减去127(或1024),得出E的真实值,取出的数值正负由S决定,M第一位之前舍去的1,加回来。
标签:第一位,计算机,浮点数,存储,计数法,127,加回来 From: https://blog.csdn.net/2302_77573185/article/details/145064260例如:5.5的进制形式?
5.5 = 101.1=1.011*2^2
此时S=0,E =2(2+127),M=1.011(011)
S E M 1bit 8bit 23bit