kłopotliwa inkrementacja

0

Czy ktoś mógłby mi wytłumaczyć, bo nie do końca rozumiem co, po kolei się tutaj dzieje, czy ja to dobrze rozumiem?
int x, y = 4;
x = (y -= 2); // x=2, y=2
x = y++; //x=3, y=3
x = y--; //x=2, y=2

1
  1. Deklarujesz zmienna x i y. Do y przypisujesz 4.
  2. Odejmujesz od y 2, czyli to samo co y = y - 2, y = 4 - 2. Po tej operacji y = 2 i ta wartość jest przypisana do x, wiec x i y = 2.
  3. Inkrementujemy y, wiec y = 3. Ponieważ jest użyty operator postinkrementacji (a nie preinkrementacji) to najpierw jest użyta stara wartość y i zostaje przypisana do x, a później się odbywa inkrementacja, wiec x = 2 y = 3.
  4. To samo co wyżej, tylko odejmujemy, wiec x = 3, a y = 2
1

Linia 2:
Do y przypisujesz y - 2 (co daje 2). Następnie, jak to już zostanie zrobione przypisujesz do x. Czyli jak w komentarzu x=2 i y=2.

Linia 3:
Tutaj jest błąd, jako że najpierw dostajesz wartość y do przypisania do x (czyli w dalszym ciągu 2) a dopiero po przypisaniu y jest inkrementowane.

Linia 4:
Tak samo jak w linii 3 jest błąd. Tylko że w tym momencie do x przypisujesz 3 (jako, że y zostało zinkrementowane) a samo y ma później wartość 2.

Czyli komentarze powinny być takie:

int x, y = 4;
x = (y -= 2); // x = 2, y = 2
x = y++; // x = 2, y = 3
x = y--; // x = 3, y = 2

1 użytkowników online, w tym zalogowanych: 0, gości: 1