我有一行代码
double i = 1 + (long)1.5* 5.0f
我的问题是转换顺序和结果是什么?一直在寻找这样的例子,但无济于事。有什么好的指南可以帮助我理解它吗?
我的问题是转换顺序和结果是什么?
将强制转换应用于,以1.5
提供long
with值1
。
将其转换为float
,与相乘5.0f
,给出一个float
with值5.0f
。
1
转换float
为具有该值的加法,给出一个float
with值6.0f
。
最后,将其提升为double
(保留值6.0
)以分配给i
。
假设使用非疯狂的浮点格式,可以精确地表示小整数。否则,可能会出现舍入错误。
如果要转换乘法结果,请使用括号控制运算符的优先级:
double i = 1 + (long)(1.5* 5.0f); // = 8.0
或使用C ++样式的强制转换,强制使用括号:
double i = 1 + static_cast<long>(1.5* 5.0f)
有什么好的指南可以帮助我理解它吗?
这是一个:http : //en.cppreference.com/w/cpp/language/operator_precedence。请注意,类型转换的优先级比乘法高,而乘法又比加法高(3 vs. 5 vs. 6)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句