鱼C论坛

 找回密码
 立即注册
查看: 2203|回复: 2

为什么两个的结果都是-0.000000,0.000000

[复制链接]
发表于 2018-8-15 17:24:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
void main()
{

        printf("%f,%f\n",20/7,-20.0/7);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-15 17:34:58 | 显示全部楼层
本帖最后由 关键是感觉 于 2018-8-15 17:55 编辑

printf("%f,%f\n",20/7,-20.0/7);
这个错误是因为堆栈错了
printf("%f,%f\n",-20.0/7,20/7);这样就行了
printf("%f,%f\n",20/7,-20.0/7);
00401028   push        0C006DB6Dh
0040102D   push        0B6DB6DB7h
00401032   push        2
00401034   push        offset string "%f,%f\n" (0042601c)
00401039   call        printf (00401070)
0040103E   add         esp,10h
我理解是-20.0/7传入了2个参数。
00401028   push        0C006DB6Dh
0040102D   push        0B6DB6DB7h
而第二个20/7结果是2
在%f的时候,需要取2个参数。所以数据不对应。导致错误


已经确定了,在打印浮点数的时候。会传入2个参数。
float f=1.2;
00401046   fld         dword ptr [ebp-4]
00401049   sub         esp,8
0040104C   fstp        qword ptr [esp]
0040104F   push        offset string "%f,%f\n" (0042601c)
00401054   call        printf (00401070
这里可以说明。
printf("%f",f);.
以上传入f的时候。会分2次传入参数。esp-8可以看出。printf在使用参数的时候也会这样去理解。


这样也可以验证我以上表达的意思
一:float f=1.2;
       printf("%d %d %d\n",f,20/7);
二: printf("%f\t%f\n",20/7,1,1.7);
       



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-8-20 16:02:21 | 显示全部楼层
看看看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 19:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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