有它贴解释 printf("%f", (int) a); 是 (int) a: 11 11 11 11,扩展到double长: 00 00 00 00 | 11 11 11 11,然后以double输出结果,也就是 0.000000。
但如图所示,%f在-m64 和 win32下输出时,似乎没有使用 (int) a。
与此同时,%f在-m32下使用了(int) a, (int) b,并最终读取到范围外的字节。
想知道为什么gcc -m32 输出结果不同,
如有错误请指正,谢谢了
gcc 版本:
gcc-multilib 的版本:
你这是两个问题
首先,c语言是一种比较古老的语言,printf函数并不自动判断数据类型,而需要你给它传递参数
%d表示按照int格式将4个字节转成字符串输出,%f表示按照float类型将4字节转字符串输出
那么这两种格式到底二进制是如何存的,每本计算机基础里都有讲
至于第二个问题,为什么在m64和m32下输出不一致
很显然在m32下你第二个参数输出的其实是c的值,而后面溢出的数据不知道哪冒出来的
也就是说在不同平台下你的代码并不一致