#include<stdio.h>
int main(){
float a,b;
a=5;
b=12;
printf("Result:%f",a+b);
return 0;
}
如果我将结果显示为float,我得到17.0.No问题 但是我将一个+ b显示为int,我将结果显示为0。
我尝试了不同的&amp;值b寻找一些模式。无论一个&amp;的价值是什么。 b是,当显示为int时,a + b显示为0.
显示为float时没有问题。
我的理由是,如果我尝试将一个浮点数打印为int,则小数部分将被截断。
我错在哪里。我通过类型转换教程搜索但无法解释这种差异。
可能这是一个非常基本的疑问,但我无法推断出这种差异背后的原因。我不知道标题是否合适。请继续。
我是初学者。如果你能提供一个我可以参考这些疑问的来源,你会得到答案,我将不胜感激。也不会以愚蠢的疑虑打扰社区。 p>
答案 0 :(得分:5)
自动类型转换差异
根据格式字符串,不会自动转换printf()
的参数。根据默认参数促销提升printf()
之后的参数,其中涉及将float
提升为double
,但重申一下,不要采取考虑格式字符串。
无论&amp;的值是多少? b是,当显示为int时,a + b显示为0.
如果你做了相同的printf("%d", a + b);
,那么它不起作用是正常的,因为它不应该。从技术上讲,它会调用未定义的行为。实际效果取决于编译平台,特别是参数传递约定。打印0
是其中一种可能性。
应该起作用的是printf("%d", (int) (a + b));
,您可以完全期望打印17
。