Niespodziewany wynik gdy używam operatorów @= i nie spodziewam się zmiany lewego operandu

0

Witam,

Mój problem polega na tym, że mam zaliczenie z C++, mam przykładowe zadania i nie wiem skąd się wziął wynik.
Wiem co się dzieje do przedostatniego wiersza.
Moje wyniki wiersz po wierszu:
i=10;
j=24;
k=3
l=37;
W ostatnim wierszu z moich obliczeń wychodzi 74, niestety jest to zły wynik, ponieważ wychodzi 99. W jaki sposób jest to wyliczone?

#include <iostream>

using namespace std;

int main()
{
    int i = 14 + -4;
    cout << i << endl;
    int j = 8 * 3;
    cout << j << endl;
    int k = 10 / 3;
    cout << k << endl;
    int l = i += 2 + (j -= 5) + (k *= 2);
    cout << l << endl;
    l += i + j + k;
    cout << l << endl;
}

Proszę o pomoc i przepraszam za tak banalny dla Was przykład.

0

Spróbowałeś użyć debuggera?

0

Problemu by nie było gdybyś skonsultował swoją książkę, ew. skrypt od wykładowcy. operator @= to połączenie operatorów @ oraz =, czyli do lewego operandu przypisywany jest wynik działania.

Po zmianie kodu na poniższy wychodzi zgodnie z Twoimi obliczeniami:

int i = 14 + -4;
cout << i << endl;
int j = 8 * 3;
cout << j << endl;
int k = 10 / 3;
cout << k << endl;
int l = i + 2 + (j - 5) + (k * 2);
cout << l << endl;
l += i + j + k;
cout << l << endl;
4
    int l = i += 2 + (j -= 5) + (k *= 2); 

W tej linii nadpisujesz zmienne j i k, od teraz j=j-5 a k=k*2, więc w ostatniej linii masz takie wartości do dodania.

3

Brak nawiasów w miejscu:

int l = (i += 2) + (j -= 5) + (k *= 2); 

W tym momencie to kolejność jest taka jakby tma były nawiasy:

int l = i += (2 + (j -= 5) + (k *= 2)); 

i i=37 po wykonaniu tego, więc stąd 99.

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