如何在长表达式中提升操作数?
How operands are promoted in a long expression?
如果我有如下表达式:
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
的结果 26=] 将转换为 float
并与 (floatVar / intVar)
返回的 float
结果相乘,此返回的 float
结果将被转换加倍并分配给 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
.
如果我有如下表达式:
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
的结果 26=] 将转换为 float
并与 (floatVar / intVar)
返回的 float
结果相乘,此返回的 float
结果将被转换加倍并分配给 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
.