谁能解释为什么 int 和 const int 给出不同的结果
转换为 float 并用于浮点数学时的结果?参见
例如这段代码:
int _tmain(int argc, _TCHAR* argv[])
{
int x = 1000;
const int y = 1000;
float fx = (float) x;
float fy = (float) y;
printf("(int = 1000) * 0.3f = %4.10f \n", 0.3f*x);
printf("(const int = 1000) * 0.3f = %4.10f \n", 0.3f*y);
printf("(float)(int = 1000) * 0.3f = %4.10f \n", 0.3f*fx);
printf("(float)(const int = 1000) * 0.3f = %4.10f \n", 0.3f*fy);
return 0;
}
结果是:
(int = 1000) * 0.3f = 300.0000119209
(const int = 1000) * 0.3f = 300.0000000000
(float)(int = 1000) * 0.3f = 300.0000119209
(float)(const int = 1000) * 0.3f = 300.0000119209
我的猜测是,在第一种情况下 0.3f*(int) 被隐式转换为浮点数,
而在第二种情况下 0.3f*(const int) 被隐式转换为 double。
这是正确的吗?如果是,为什么会发生这种情况?
另外,“正确”的方法是什么?
非常感谢
编译器甚至可以在生成代码之前执行两个常量的乘法。其余的必须在运行时完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)