你用的是什么编译器,第二段代码16进制的0x42500000转换后为1112539136.000000
不好意思,我写错了,第二段代码中转换后的结果是1112539136.000000;
但是为什么这两种强制类型转换的结果不一致呢?
原因找到了
直接对变量进行类型强制转换时,编译器会
1)先将a的值0x42500000当成整型数处理,可以看成当成1112539136;
2)然后将其按照浮点数的格式存储在内存中,可以看成当成1112539136.0(其内存的值是:0X4E84A000);
3)最后将此值按照浮点数通过printf显示出来,即看到的1112539136.000000;
但是如果第一段代码中的方式,即:
1)先将保存整型数的地址转换成浮点数类型的地址,因为只对地址进行了类型转换,地址内保存的内容就仍然保持不变,仍然为0x42500000;
2)然后编译器就会按照浮点数的存储格式解释内存值0x42500000,其值恰好为52.0;
3)最后通过printf将上述值显示出来;
【总结】:直接对数据进行强制转换时,会改变数据在内存中的存储格式,尤其浮点类型和整型数据之间的转换;