я для себя запоминал так:
a++ изменяет значение
при следующем исполъзовании, в то время как ++a - мгновенно.
т.о. (выражение читается слева направо), получаем:
1 + (тут мы используем переменную снова, значит оно стало 2, и мгновенно прибавляем к нему 1, значит второе слагаемое 3). Получаем в сумме 4.
Кстати в Java точно также (это я к тому что поведение может и не интуитивное, но в некой мере общепринятое)
P.S.: Забыл указать, для полноты картины, что, унарные операции имеют более высокий приоритет чем арифметические, (см.
Приоритет операторов) поэтому мы сначала вычисляем значения слагаемых, и лишь потом производим сложение.