LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 580|回复: 4

奇怪的printf中的数据类型转换

[复制链接]
发表于 2004-11-1 16:58:18 | 显示全部楼层 |阅读模式
main()
{
int i=5;
printf("%d\t%f\t%d\n",i,i,i);
printf("%d\t%f\t%d\n",i,(float)i,i);
}
运行:
5        0.000000        4194304
5        5.000000        5

同样,float也有这样的问题.
为什么?
发表于 2004-11-1 20:31:40 | 显示全部楼层
第二个能理解,第一个...
发表于 2004-11-1 21:34:37 | 显示全部楼层
我的是这样,奇怪ing  :confused:

5       0.000000        0
5       5.000000        5
发表于 2004-11-1 22:16:02 | 显示全部楼层
贴出它们的代码:
  1. printf("%d\t%f\t%d\n", i, i, i);
  2.         movl    -4(%ebp), %eax
  3.         movl    %eax, 12(%esp)
  4.         movl    -4(%ebp), %eax
  5.         movl    %eax, 8(%esp)
  6.         movl    -4(%ebp), %eax
  7.         movl    %eax, 4(%esp)
  8.         movl    $.LC0, (%esp)
  9.         call    printf
  10. ------------------------------
  11. printf("%d\t%f\t%d\n", i, (float) i, i);
  12.         movl    -4(%ebp), %eax
  13.         movl    %eax, 16(%esp)
  14.         fildl   -4(%ebp)
  15.         fstpl   8(%esp)
  16.         movl    -4(%ebp), %eax
  17.         movl    %eax, 4(%esp)
  18.         movl    $.LC0, (%esp)
  19.         call    printf
复制代码
能看出点区别吧,不过我无法说出具体的含义。
发表于 2004-11-3 21:36:55 | 显示全部楼层
mark一下,楼上的代码很好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表