Wątek przeniesiony 2015-11-13 15:12 z Java przez bogdans.

Jak to jest z tymi operatorami - niby to proste, a jednak porąbane

0

Dlaczego ten kod wyświetla liczbę 3, skoro inkrementuję ją do 4? Sory za głupi wątek;-)

 
int a, b;
            b = 3; 
            a = b++;
            Console.Write(a);

Przecież b było 3, zwiększyło się na 4 i zostało przypisane do a. Dlaczego więc a mam cały czas 3?

0

Hasła: preinkrementacja, postinkrementacja

1

a sprobuj napisać tak:
a = ++b; //wynik 4 tutaj dodaje 1
a = b++ //wynik 3
Obie powodują zwiększenie wartości zmiennej o 1 jednak jest między nimi pewna różnica, która mozna zobaczyc powyżej

1

Jasniej :

Chodzi o to że w instrukcji
a = b++; ( postinkrementacja jak ju8z ktos wyzej napisal)

najpierw przypisujesz do a wartosc jaka ma b, a nastepnie b zwiekszasz o 1.

czyli po wykonaniu tej instrukcji a = 3, a b=4.

0

Dobra, to takie zadanie. Mnie cały czas a wychodzi 3. Zaczynam liczenie od nawiasu, bo ma najwyższy priorytet, ale program wypisuje 4. Czemu?

 
int a, b, c;
            b = 1; c = 3;
            a = b++ + (b+c) - c++ + --b;
           

Gdzieś muszę popełniać drobny błąd.

1

ojej jakby ci to wytlumaczyc..

To prawda ze nawiaz ma wyzszy piorytet, ale program nie dziala w taki sam sposob, jak czlowiek liczacy. Ze najpierw podsumowuje sobie wszystkie nawiasy a potem dodaje to co mu zostalo.

Komputer i tak to twoje dzialanie najpiierw przetworzy od lewej do prawej, a potem zapisze do zmiennej A.
Jak to sie ma do nawiasów ??
Ano istnieje takie pojęcie jak Odwrotna Notacja Polska. I to wlasnie tak, przetwazane sa dzialania matematyczne. W duzym skrocie A+B zapisane w ONP to AB+.
Czyli tak czy siak B++ zostanie zinkrementowane najpierw :)

No czyli tak

a = b++ => a=1 , b=2,
a = b++ + (b+ c) => a = 1 + 2 + 3 = 6
a = b++ + (b + c) - c++ => a = 1 + ( 2 + 3) - 3 = 3; c = 4, b=2
a = b++ + (b+c) - c++ + --b => a = 1 + (2 + 3) - 3 + 1 = 4 , b=1

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