niko42 Написал:Спасибо. Как бы это действие понятно: --a + a * ++a переведем 1 +1*2
Интересует следующие действие: + a++ +a++
После "--a + a * ++a" значение
а составляло 2.
Теперь переходим к "a++ + a++".
а++ = 2 (т.к. постфиксный инкремент, мы сначала вернули значение а, которое равно 2, затем увеличили а на 1. Таким образом, сейчас значение
а составляет 3)
a++ = 3 (т.к. постфиксный инкремент, мы сначала вернули значение а, которое равно 3, затем увеличили а на 1. Таким образом, сейчас значение
а составляет 4, которое, к слову, далее нигде уже в расчете принимать участие не будет).
В итоге:
a = 2 + 1 + 1*2 + 2 + 3 = 10
UPD.
Цитата:Если более детально.
То не пойму логики
int a= 2;
a = a++;
а == 2
int a= 2;
a = a++ + a++;
а == 5
Почему первая операция без изменений, а вторая изменяет.
Потому, что в первом случае:
1. мы вернули значение 2
2. увеличили а на 1 (в памяти оно стало 3)
3. но потом значению а было присвоено значение 2 (которое мы вернули ранее).
Во втором же случае:
1. мы для первого слагаемого (а++) вернули значение 2
2. увеличили значение а на 1 (в памяти оно стало 3)
3. для второго слагаемого (а++) вернули значение 3 (т.к. ранее увеличили а на 1)
4. опять увеличили значение а на 1 (в памяти оно стало 4)
5. но в итоге, присвоили значению а (которое в памяти 4) значение суммы 2 + 3 = 5.