c语言类型转换

c语言类型转换,第1张

不要码隐猜测,渣模携应该找一些资料看看。

在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”的格式输出时就会引起数据读取的地址错误,因而得到一个随机的值,并引起后续输出错位。

有些结果一下想不清楚,在初学阶段只要知道是错误的就够了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12292551.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存