繁体   English   中英

在算术表达式中是否会将double隐式转换为unsigned int?

[英]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然后uiunsigned 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM