小数在内存中的存储方式IEEE 754

本文的数学符号使用latex生成, 演示地址http://www.codecogs.com/latex/eqneditor.phpphp

java和C都遵循IEEE 754浮点数标准wiki介绍. 先来回顾一下科学记数法, 好比123这个数字, 使用科学记数法, 能够写做:
1.23 x 10^2java

计算机的世界都是二进制的, 123的二进制为1111011, 能够记为:
1.111011 x 10^2
其中整数位1为固定值, 有效信息有小数位0.111011和指数6 双精度的浮点数的表示方式为:code

63          62 .... 52           51  ......    0
     符号位sign   指数偏移exp(11bit)   小数fraction(52bit)
区域 说明
符号位 0为正数, 1表示负数
指数偏移 实际指数+1023, 这么作是为了将负指数转换成正值; 对于数字0, 这个值为0
小数 小数点后面的二进制; 对于数字0, 则全为0

继续以double类型的123举例
sign = 0
exp = 1023 + 6 = 1029 = 10000000101B, 不足11bit, 则在前面补0
fraction = 111011, 不足52bit, 则在后面补0
完整的二进制形式为
0 1000000 0101 1110 11 00 00000000000000000000000000000000000000000000
转换成16进制为 40 5E C0 00 00 00 00 00
在小端字节序的系统上(低位存放在低字节上), 显示为 00 00 00 00 00 C0 5E 40ip