[英]Would a double ever be implicitly converted to an unsigned int in arithmetic expressions?
在Stanley B. Lippman的C ++ Primer中 ,关于“隐式转换”的部分说:
int ival; unsigned int ui; float fval; fval = ui - ival * 1.0;
ival
转换为double,然后乘以1.0
。 结果转换为unsigned int
,然后由ui
减去。 结果转换为float
,然后分配给fval
。
但我不这么认为:我认为实际上ival
被转换为double然后再乘以1.0
然后ui
是unsigned int
类型被转换为double而不是相反,然后乘法的结果从转换为转换为双ui
值。 最后将此最终double值转换为float并将其分配给fval
。
为了确保我说的话:
ival = 5;
ui = 10;
fval = 7.22f;
dval = 3.14;
std::cout << typeid(ui - ival * 1.0).name() << std::endl; // double
std::cout << (ui - ival * 1.7) << std::endl; // 1.5 this proves that the unsigned int ui is converted to double not the contrary that is because C++ preserves precision. otherwise the decimal part is truncated.
你的假设是正确的,这本书是错误的。
fval = ui - ival * 1.0;
可以改写为
fval = ui - (ival * 1.0);
所以这给了我们
float = unsigned - (int * double)
由于通常的算术转换给我们, (int * double)
变为double
float = unsigned - double
这又是一个double
结果,我们将该double
赋给float
变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.