在32位PC系统中,int型的3是0x00000003,在内存中占4个字如伏节,分别是03,00,00,00
按照IEEE754浮点数表示标准,float型的3.0是0x40400000,在内存中占4个字节,分别是00,00,40,40
类似地,double型的3.0是0x0000000040080000,在内存中占8个字节,分别是00,00,08,40,00,00,00,00
如果用“%d”格式输出,在指定地址处读取2字节,然后按十进制整数解释输出,float和double型的3的前两个字节都是“00,00”,解释输出当然就是0了。
类似地,如果用“%d”把浮点型的3.0按十进制整型格式解释输出,得到1074266112的结果也应该可以理解了,这正是0x40080000的十进制值。
在处理float类型时还有一种情况,随编译器的浮点运算优化而不同。有时编译优化会对float型(不包括double类型)采用FPU中的浮点栈,按非“%f”的格式输出时就会引起数据读取的地址错误,因而得到一个随机的值,并引起后续输出错位。
有些结果一下想不清楚,在初学阶段只要知道是错误的就够了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)