为什么(double + int)的结果为0(C语言)

PWS*_*PWS 5 c double int

的结果

printf("%d\n", 5.0 + 2);

是0

int num = 5.0 + 2;
printf("%d\n", num);
Run Code Online (Sandbox Code Playgroud)

是7

这两者有什么区别?

Som*_*ude 9

结果5.0 + 27.0和是类型double.

"%d"格式是打印int.

不匹配的格式规范和参数类型会导致未定义的行为.

要与您一起打印floatdouble值,printf请使用该格式"%f".


int num = 5.0 + 2;
Run Code Online (Sandbox Code Playgroud)

您将结果5.0 + 2转换为int7.然后int使用正确的格式说明符打印该值.

  • @PWS - 0并不少垃圾.未定义未定义,期间. (2认同)
  • @PWS不是"垃圾",只是不是你所期望的那样.如上所述,不匹配的格式和参数类型导致[*未定义的行为*](https://en.wikipedia.org/wiki/Undefined_behavior),理论上可以召唤[鼻子恶魔](http://www.catb.org /jargon/html/N/nasal-demons.html)或重新格式化硬盘. (2认同)

Lun*_*din 6

在所有表达式中,每个操作数都有一个类型.5.0有类型double.2有类型int.

只要double和integer用作同一运算符的操作数,整数就会在计算之前以无提示方式转换为double.结果是类型double.

所以你传递double给了printf,但是你告诉它期待一个int,因为你使用过%d.结果是一个错误,结果没有定义.

但是,如果是int num = 5.0 + 2;,你首先得到一个结果double,7.0.然后强制转换回int.该代码相当于:

int num = (int)((double)5.0 + (double)2);
Run Code Online (Sandbox Code Playgroud)

更多细节:隐式类型促销规则