1274170056 发表于 2018-8-15 17:24:54

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

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

        printf("%f,%f\n",20/7,-20.0/7);
}

关键是感觉 发表于 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
00401049   sub         esp,8
0040104C   fstp      qword ptr
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);
       



lichuncheng 发表于 2018-8-20 16:02:21

看看看看{:10_277:}
页: [1]
查看完整版本: 为什么两个的结果都是-0.000000,0.000000