如果我有如下表达式:
double d = floatVar / intVar;
intVar
将被提升为 float
,然后返回的 float
结果将被转换为 double
并分配给 d
。但是如果我有一个长表达式会发生什么,例如:
double d = floatVar / intVar * shortVar + charVar + intVar2;
是否将所有变量提升为float
,然后将返回的float
结果转换为double
并赋值给d
?
此外,如果我有以下内容:
double d = (floatVar / intVar) * shortVar + charVar + intVar2;
intVar
会被转换为float
,而shortVar
和charVar
会被转换为 >int
,然后将 shortVar + charVar + intVar2
返回的 int
结果转换为 float
并乘以返回 (floatVar/intVar)
的 float
结果,这个返回的 float
结果将被转换为 double 并分配给 d
?
最佳答案
适用操作顺序。 /
和*
和+
都是左结合的,/
和*
具有相同的优先级(大于 +
的优先级),因此:
double b = floatVar / intVar * shortVar + charVar + intVar2;
等同于:
double b = (((floatVar / intVar) * shortVar) + charVar) + intVar2;
在每一步中,都会执行适当的转换:intVar
转换为 float
,shortVar
转换为float
,charVar
转换为float
,intVar2
转换为float
。最终结果提升为 double
。
另一方面,如果您将 charVar + intVar2
括在括号中以强制该操作首先发生,那么 charVar
将被提升为 int
(假设 char
的范围在 int
的范围内,就像您可能遇到的几乎所有系统一样),以及结果总和将转换为 float
。
关于c++ - 如何在长表达式中提升操作数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28082968/