浮点数在内存中的存储方式之简析

服务器

  按照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

标签: 服务器