这里我们以8.25这个数为例说明计算机时如何存取float类型的数据的:
float a = 8.25;
引言
1. 所占位数
首先,明确一个概念,float类型的数据在常规计算机中通常占4个字节,也就是32位。其内存分布如图:
位字段说明 | 所占位数 | 具体含义 |
---|---|---|
符号位 | 1 | 说明浮点数正负,0表示正,1表示负 |
指数位 | 8 | 说明浮点数的指数,也有正负,大于127为正,小于127的为负 |
尾数位 | 23 | 浮点数的尾数位 |
2. 科学计数法
在十进制中,我们了解科学计数法。
例如,825的科学计数法表述为:8.25*102,0.0825的科学计数法表述为:8.25*10(-2)
请注意观察这一点:整数部分的值是大于1小于10的。后面的指数部分也有正指数和负指数。
2. 计算步骤
1. 二进制表示
将8.25用二进制数表示出来:
首先:整数部分为8,二进制表示为1000;
其次,小数部分为0.25,为二进制表示计算方法和整数部分的计算方法恰恰相反,整数部分转换二进制的时候是不断除以2得到的,这里就是不断乘以2:
0.25*2 = 0.5,整数部分为0,记下:0
0.5*2 = 1.0,整数部分为1,记下:1
则0.25的二进制表示即为0.01,即1*2^(-2);
在这一阶段,我们得出结果:8.25的二进制表示为:1000.01
2. 使用科学计数法来表示
在引言里介绍了十进制的科学计数法,同理我们推理出二进制的科学计数法:
8.25的二进制表示为:1000.01;
1000.01的二进制科学计数法表示为:1.00001*2^3
请根据引言中的注意事项,可以推理出:在二进制的科学计数法中:整数部分的取值只能是1,是个固定值。
因此在表示中可以直接把这一步写死,根本不需要去表示整数部分。
3. 转化为计算机存储数据
1.00001*2^3
在引言里,我们已经知道了浮点数在计算机中的表示方法,套用这套表示方法,我们可以知道:
符号位:
8.25是一个正数,因此这位为0.
指数位:
指数位为+3,所以这里的值为127+3=130,130的二进制表示为1000 0010,因此这里为1000 0010。
尾数位:
小数位为00001,这里尾数位占用23个字节,位数不够,所以补0,因此这里为:00001后面补18个0。
4.得出结论
浮点数8.25在计算机中的二进制表示为:0 1000 0010 0000 1000 0000 0000 0000 000