0

如果我有如下表达式:

double d = floatVar / intVar;

intVar将被提升为 a float,然后返回的float结果将转换为 adouble并分配给d. 但是如果我有一个很长的表达式会发生什么,例如:

double d = floatVar / intVar * shortVar + charVar + intVar2;

会不会把所有的变量都提升为a float,然后返回的float结果会转换为adouble并赋值给d

另外,如果我有以下情况:

double d = (floatVar / intVar) * shortVar + charVar + intVar2;

intVar转换为a float,whileshortVarcharVar将转换为an int,然后将intfrom的返回结果shortVar + charVar + intVar2转换为a并与返回的结果float相乘,这个返回的结果将转换为double并赋值给?float(floatVar / intVar)floatd

4

1 回答 1

2

操作顺序适用。/*+都是左结合的,并且/*具有相同的优先级(大于+),所以:

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.

于 2015-01-22T07:09:01.690 回答