В выражениях операции, имеющие одинаковый приоритет, обычно выполняются слева направо. Исключение – операция присваивания.
a – b + c – d = {[(a – b) + c] – d}
С другой стороны, порядок вычисления операндов в выражениях неопределён.
int i = 5;
x = (i --) + (i ++) – скобки могут вычисляться в любом порядке.
Можно явно задать порядок выполнения операций с помощью скобок. Иногда это может быть очень существенно.
int x;
x = (3 * 1) / 2; /1
x = 3 * (1 / 2); /0
Результат выражения характеризуется не только значением, но и типом. Если операнды имеют одинаковый тип, то и выражение имеет тот же тип. Если типы операндов разные, то перед вычислением будет выполнено т.н. неявное приведение типов, обеспечивающее преобразование меньших типов в большие для сохранения значимости и точности. Результат будет иметь больший тип.
double d;
short s; // => d * s – double
Существует возможность выполнять т.н. явное приведение типов.
8.10.2012