【发布时间】:2016-03-15 16:28:13
【问题描述】:
int i1 = 0, i2 = 0;
float f = 2.8f;
i1 += f;
i2 += (int)f;
f += 0.1;
i1 += f;
i2 += (int)f;
f += 0.1;
i1 += f;
i2 += (int)f;
printf("%d %d\n", i1, i2);
输出:
7 6
- 为什么隐式和显式转换结果会不同?
- 我希望结果类似于隐式转换的结果,但没有编译警告。有可能吗?
平台是Windows7、VS2010或2013。
【问题讨论】:
-
你没有显示输出。
-
能否也提供结果
-
@grunt 不要编辑你自己的问题,以免改变问题,尤其是在收到好的答案之后。
-
@Pete Becker 不同意编辑:将“显式转换”更改为“显式转换”。原始术语是正确的,并且与 C 规范一致。建议恢复。
-
@chux -- 演员表总是显式的,所以“显式演员表”是多余的。但编辑主要是关于“隐式演员”。强制转换是您在源代码中编写的内容,用于告诉编译器进行转换。转换可以是显式的(即使用强制转换)或隐式的。
标签: c casting floating-point