关于%d,%f,1.0/3*3
int a = 1.0/3*3;printf("%f\n",1.0/3*3);
printf("%d\n",1.0/3*3);
printf("%f",a);
这三个结果为什么是
1.00000
0
0.00000 第一个因为它就是1.00000(多少个0取决于精度)
第二个和第三个都是一样的都是0啊, 这个可能要有一点汇编知识才能完全理解,现在可以这么理解,整形数据和浮点数存放格式不一样,printf("%d\n",1.0/3*3);后面的1.0告诉编译器这是一个浮点数,但是前面的占位符是整形数据,则编译器会使用整形数据的读取方式去读取后面的浮点数,最后读出来的结果就是0,后面的是用浮点数的读取方式去读取后面的整形数据,读出来的结果也是0。
要稍微理解一下可以去看看小甲鱼写的那个浮点数的扫盲贴。 amadboy2009 发表于 2021-7-31 10:19
这个可能要有一点汇编知识才能完全理解,现在可以这么理解,整形数据和浮点数存放格式不一样,printf("%d\n ...
谢谢 wp231957 发表于 2021-7-31 06:38
第一个因为它就是1.00000(多少个0取决于精度)
第二个和第三个都是一样的都是0啊,
谢谢
页:
[1]