如何在长表达式中提升操作数?

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,而shortVarcharVar会转成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 转换为 floatshortVar 转换为 floatcharVar 转换为floatintVar2被转换为float。最终结果提升为 double.

另一方面,如果您将 charVar + intVar2 括在括号中以强制先执行该操作,则 charVar 将提升为 int(假设char 的范围适合 int 的范围,因为它在您可能遇到的几乎任何系统上都是如此),结果总和将转换为 float.