问题的来源

在做调试的时候,发现了一个奇怪的点。

 

 

 

 double类型在内存中的形式_double类型

 

 

 偶然发现double类型在数据内存中保存的方式很奇怪。从图上可以看到breadth变量是int类型,他在内存中的储存方式是02 00 00 00。这个是很正常的。【注意】这里是小端模式,小端就是低地址数据放在低位内存中,与逻辑方向一致。区别于大端模式

但是length在内存中就不太正常了。他是00 00 00 00 00 00 f0 3f。

解决问题

后来经过查找资料。double类型在内存中的存放是遵循 IEEE Standard 754 for Binary Floating-Point Arithmetic标准的。【http://www.wikilib.com/wiki?title=IEEE_754&variant=zh-sg

IEEE 双精度格式为8字节64位,由三个字段组成:52 位小数 f ; 11 位偏置指数 e ;以及 1 位符号 s。

这些字段连续存储在两个 32 位字中
double类型在内存中的形式_double类型_02

他的表示方法 

```````` 符号位  指数 尾数   长度 

double   1         11     52     64 

 

那一个double a=8.5 举例子

首先确定符号位为  0

8.5的二进制形式为1000.1

转换成科学计数法显示为1.0001*(2^3)那么指数部分应该为 000 0000 0011,再加上double 类型的移位码1023  :011 1111 1111,得到为100 0000 0010

小数部分为1,后面的位数用0填补

则最后的表示为 0     100 0000 0010     0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

转换成16进制为  40 21 00 00 00 00 00 00

再转换成小端模式  00 00 00 00 00 00 21 40就是最后再内存中的形式。

double类型在内存中的形式_double类型_03