浮点型在计算机内存中的储存方式
前言
浮点型和整型在计算机内存中都是以补码形式储存的,而浮点型为了表示小数,规范又和整型有所不同。
IEEE 754标准
- IEEE二进制浮点数算数标准(IEEE 754)规定,任意一个二进制浮点数可以表示成如下形式:
- ( − 1 ) S ∗ M ∗ 2 E (-1)^S * M * 2^E (−1)S∗M∗2E
- ( − 1 ) S (-1)^S (−1)S表示符号位,S = 0,浮点数为整数,S = 1,浮点数为负数
- M表示有效数字, 1 ⩽ M < 2 1 \leqslant M < 2 1⩽M<2。
- 2 E 2^E 2E表示指数位。
float类型内存中储存占比
- float类型在内存中占用4个字节,32个bit位,S、M、E所占bit位分布如下图。
- S占用1个bit位,E占用8个bit位,M占用23个bit位。
double类型内存中储存占比
- Double类型在内存中占用8个字节,64个bit位,S、M、E所占bit位分布如下图。
- S占用1个bit位,E占用11个bit位,M占用52个bit位
指数E
- E是一个无符号整数,float类型E的取值范围是0255,double类型E的取值范围是02047。为了表示负数,根据IEEE 754规定,E在存入内存前,需要加上中间数,float类型需要加上127,double类型需要加上1023。
特殊情况
- 当E全为0
- 有效数字M不再加上第一位的1,该数是个接近于0的数字。
- 当E全为1
- 如果有效数字M全为0,表示 ± \pm ±无穷大。
演示储存方式
-
以7.5(float)距离
-
// 因为是正数,所以S为1 // 7.5的二进制补码是:00000000 00000000 00000000 00000111.1 // 按照IEEE 754标准转换:(-1)^0 * 1.111 * 2^2 // S = 0, M = 1.111, E = 2+127 = 129
-
//补码就是:0 10000001 11100000000000000000000
-
根据十六进制数据,可知以上计算是正确的。
-