float是C语言的基本数据类型中的一种,表示单精度浮点数。C语言规定单精度浮点型在内存占用4个字节,精度为7位,取值范围为:3.410^-38 ~ 3.410 ^38 或者 -(3.410 ^-38 ~ 3.410 ^38)。依据IEEE规定 :float在存储中都分为三个部分:
1、符号位(Sign) : 0代表正,1代表为负
2、指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
3、尾数部分(Mantissa):尾数部分
其中float和double的存储方式如下图所示:
数据类型 | 符号位 | 指数 | 尾数 |
---|---|---|---|
float | 1bit | 8bit | 23bit |
double | 1bit | 11bit | 52bit |
float在内存中的存储规则
计算机只能识别二进制,所以float类型在内存中也是通过二进制存储的。因此float类型需要转换为二进制形态,转换步骤如下:
1)先将这个实数的绝对值化为二进制格式。
2)将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边。
3)从小数点右边第一位开始数出二十三位数字放入第22到第0位。
4)如果实数是正的,则在第31位放入“0”,否则放入“1”。
5)如果n 是左移得到的,说明指数是正的,第30位放入“1”。如果n是右移得到的或n=0,则第30位放入“0”。
6)如果n是左移得到的,则将n减去1后化为二进制,并在左边加“0”补足七位,放入第29到第23位。如果n是右移得到的或n=0,则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位
注意:将绝对值转换为二进制之后,小数点左移n位,n即为该数的指数,指数为阶码为n+127。这其实就是第5和6步骤运算得到的结果。