• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

++a + ++a + ++a

Object Storage Arubacloud
+2 głosów
528 wizyt
pytanie zadane 17 października 2018 w C i C++ przez Michał Szlachtowski Nowicjusz (140 p.)
Witam. Czy jest ktoś wstanie wytłumaczyć mi ile i dlaczego będzie wynosiło b w ponizszych rownaniach:

Int a=10,b1, b2, b3;

b1=++a + ++a + ++a;

b2= a++ + ++a + ++a;

b3=++a +a++ + ++a;

 

Ps. Kompilator wyrzuca mi

b1=37

b2=35

b3=36
komentarz 17 października 2018 przez X3h Dyskutant (9,540 p.)
To nie są równania tylko przypisania.

4 odpowiedzi

+1 głos
odpowiedź 17 października 2018 przez kevin Mądrala (5,010 p.)
komentarz 17 października 2018 przez monika90 Pasjonat (22,940 p.)
nie warto czytać tego artykułu
+1 głos
odpowiedź 17 października 2018 przez X3h Dyskutant (9,540 p.)
Jestem pewny, że to nie kompilator wyrzuca. Preinkrementacja to ++a czyli najpierw zwiększ potem pobierz, a postinkrementacja to a++ czyli najpierw pobierz potem zwiększ. Powinno wyjść b1 = 36, b2 = 44, b3 = 53. Łatwo to rozpisać krok po kroku.
komentarz 17 października 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)

Ciężko mi stwierdzić czy nic nie wnosi.

@monika90, mogłabyś doprecyzować aby dla @X3h było to bardziej wartościowe? Ewentualnie innych przeglądających mających pojęcie w temacie proszę o rozszerzenie tematu/zagłosowanie, aby nie było wątpliwości czy odpowiedź jest poprawna czy też nie.

komentarz 18 października 2018 przez monika90 Pasjonat (22,940 p.)
Najpierw niech pytający doprecyzuje pytanie. Dlaczego Int jest wielką literą i o jaki język chodzi.
komentarz 18 października 2018 przez X3h Dyskutant (9,540 p.)
Tutaj chodzi o operacje na intach. W każdym języku działa tak samo.
komentarz 18 października 2018 przez draghan VIP (106,230 p.)

Tutaj chodzi o operacje na intach. W każdym języku działa tak samo.

Ohh deer.

3
komentarz 18 października 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)

@X3h,

no nie do końca chodzi o to. Takie działania faktycznie są niezdefiniowane. Postaram się wytłumaczyć, dlaczego tak jest.

Otóż - zależnie od tego, od której strony przetwarzane byłoby takie działanie matematyczne, moglibyśmy otrzymać inny wynik. Prosty przykład:

int a = 10;
int b = (++a) + (a--);

Jak pewnie wiesz, dodawanie jest działaniem przemiennym - to znaczy, że możemy przestawić kolejność operatorów w dodawaniu i powinniśmy otrzymać taki sam wynik. Spróbuj więc obliczyć swoim sposobem wartości dwóch poniższych działań (skoro dodawanie jest przemienne, to wynik powinien wyjść taki sam). Tak jak w przykładzie wcześniej, załóżmy że a = 10.

b = (++a) + (a--);
b = (a--) + (++a);

Jeżeli "dobrze liczę" (czyli twoim sposobem), górne działanie będzie dawało wynik 22, a dolne 20.

–1 głos
odpowiedź 17 października 2018 przez k222 Nałogowiec (30,150 p.)
b1 = 11 + 12 + 13

b2 = 11 + 12 + 12

b3 = 11 + 11 + 13

dzieje się tak dlatego, że:

++a + ... najpierw zwiększa a o 1 a potem je dodaje do sumy

a++ + ... najpierw dodaje a do sumy a potem się zwiększa o 1

oczywiście dodawanie wykonujemy od lewej do prawej

 

więc na przykładzie b3:

- najpierw zwiększamy a o 1 i dodajemy do sumy b3=++a = 11

- potem dodajemy ponownie tę samą wartość do sumy, a potem zwiększamy ją o 1 b3=++a +a++ = 11 + 11 (ale teraz a = 12 bo po dodaniu je zwiększyliśmy)

- następnie zwiększamy a o 1 (poprzednio było równe 12, więc teraz jest równe 12+1=13) i na końcu je dodajemy do sumy b3=++a +a++ + ++a = 11 + 11 + 13 = 36
komentarz 17 października 2018 przez Michał Szlachtowski Nowicjusz (140 p.)
11+11+13=36?  A nie 35?
1
komentarz 17 października 2018 przez monika90 Pasjonat (22,940 p.)
Zachowanie programu jest niezdefiniowane, wyniki mogą być dowolne, nawet się nie musi dać skompilować.
–1 głos
odpowiedź 18 października 2018 przez niezalogowany

Odpalone na Code::Blocs 17.12 działającym pod XP.

komentarz 18 października 2018 przez monika90 Pasjonat (22,940 p.)
a skompiluj z flagą -Wall

Nie znaleziono podobnych pytań

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...