按照IEEE-754标准,“单精度”和“双精度”浮点数在内存中是按照如下方式存储的:
其中,“符号位”比较简单,即‘1’代表负数、‘0’代表正数。
“指数部分”和“尾数部分”则按照二进制的科学计数法的方式存储:
下面,以浮点数‘4.125’为例,详细说明“指数部分”和“尾数部分”的计算方法:
整数部分‘4’的二进制表示为:100
小数部分“.125”的二进制表示为:.001
0.125 * 2 = 0.25 --> 0
0.25 * 2 = 0.5 --> 0
0.5 * 2 = 1.0 --> 1
综上,浮点数‘4.125’的二进制形式为‘100.001’。转换为科学计数法的形式表示为
“尾数部分”为‘1.00001’,因为默认“尾数部分”的取值范围是[1, 2),因此存储时省略小数点前的‘1’。
“指数部分”为‘2’,因为“指数部分”可能是负值,为了存储方便,标准规定在指数存储时加一个偏移量,“单精度”的浮点数偏移量为‘127’、“双精度”浮点数的偏移量为‘1023’。所以,指数‘2’在单精度浮点数的“指数部分”实际存储为‘2+127=129’,在双精度浮点数的“指数部分”实际存储为‘2+1023=1025’。
即“单精度”浮点数‘-4.125’在内存中的存储应为:1 10000001 00001
“双精度”浮点数‘-4.125’在内存中存储为:1 10000000001 00001