如题,出现这种情况的原因有两个:
1、整形数和浮点数在内存中的存储格式和布局不同(理解浮点数的内存布局和表示方式,请参考:http://blog.youkuaiyun.com/songjinshi/article/details/7753777)
2、printf在进行参数入栈时是根据实参的类型进行入栈,而不是根据格式化字符中指定的类型,具体入栈过程如以下所示。所以造成入栈实参的类型和实际函数使用的类型不匹配(关键是所占内存的大小不同),所以在具体的解析中就会出现如题所说的结果,因为整形的内存布局在被解析为浮点数时会非常小,因为整形本来是4个字节存储,而被解析为8个字节的浮点数,所以所得的值会非常小,正如浮点数的的表示:非规格化:当E的二进制位全部为0时,N为非规格化形式。
本文探讨了使用printf函数打印整型变量时出现极小浮点数的现象,分析了原因涉及整型与浮点型在内存中的不同存储方式及printf参数处理机制,并通过反汇编代码展示了参数入栈的具体过程。
5093

被折叠的 条评论
为什么被折叠?



