Как операнды повышаются в длинном выражении?

Если у меня есть выражение, подобное следующему:

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, а затем вернулся int результат от shortVar + charVar + intVar2 будет преобразован в float и умножить с возвращенным float Результат (floatVar / intVar)и это вернулось float результат будет преобразован в двойной и назначен d?

0

Решение

Порядок операций применяется. / а также * а также + все левоассоциативны, и / а также * имеют равный приоритет (который больше, чем у +) так вот:

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,

2

Другие решения


По вопросам рекламы [email protected]