自动类型转换差异

时间:2014-05-01 11:44:19

标签: c casting type-conversion

#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,则小数部分将被截断。

我错在哪里。我通过类型转换教程搜索但无法解释这种差异。

可能这是一个非常基本的疑问,但我无法推断出这种差异背后的原因。我不知道标题是否合适。请继续。

我是初学者。如果你能提供一个我可以参考这些疑问的来源,你会得到答案,我将不胜感激。也不会以愚蠢的疑虑打扰社区。

1 个答案:

答案 0 :(得分:5)

  

自动类型转换差异

根据格式字符串,不会自动转换printf()的参数。根据默认参数促销提升printf()之后的参数,其中涉及将float提升为double,但重申一下,不要采取考虑格式字符串。

  

无论&amp;的值是多少? b是,当显示为int时,a + b显示为0.

如果你做了相同的printf("%d", a + b);,那么它不起作用是正常的,因为它不应该。从技术上讲,它会调用未定义的行为。实际效果取决于编译平台,特别是参数传递约定。打印0是其中一种可能性。

应该起作用的是printf("%d", (int) (a + b));,您可以完全期望打印17

相关问题