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

Problem ze zrozumieniem warunków w if'ie.

VPS Starter Arubacloud
0 głosów
305 wizyt
pytanie zadane 26 września 2016 w C i C++ przez Arkadiusz Sieczak Początkujący (400 p.)
#include <iostream>
using namespace std;
int main()
{
  int x = 0;
  int y = 0;
  if (x++ && y++)
  {
    y += 2;
  }

	cout << x + y <<endl;

  return 0;
}

Operator AND wymaga by obydwa warunki były prawdziwe, znam również operatory inkrementacji. Jednak czemu program zwraca wartość 1?

komentarz 26 września 2016 przez Arkadiusz Sieczak Początkujący (400 p.)
Bardzo dziękuję za pomoc!

3 odpowiedzi

+3 głosów
odpowiedź 26 września 2016 przez xandros Nałogowiec (29,450 p.)

 if (x++ && y++)

Sprawdzamy, czy x jest prawdziwy. Jak wiemy 0 jest traktowane jako false, więc zwraca false. Następnie inkrementujemy go, ponieważ dąłączyliśmy postinkrementacje. Jako że kompilator już wie, że ten warunek się nie wykona, nie będzie sprawdzał następnych wartości i tym samym nie zinkrementuje y.

+3 głosów
odpowiedź 26 września 2016 przez Ehlert Ekspert (214,220 p.)
int x = 0;
wypisz(x++); // 0
wypisz(x); // 1

x = 0;

wypisz(++x) //1
wypisz(x); // 1

Jaśniej? wink

komentarz 26 września 2016 przez Arkadiusz Sieczak Początkujący (400 p.)
teraz tak, dziękuję
+1 głos
odpowiedź 26 września 2016 przez Surykat Stary wyjadacz (14,780 p.)
Kiedy program sprawdza warunek, prawdopodobnie zdąży wykonać inkrementację dla x. W momencie sprawdzania x = 0, więc warunek będzie nieprawdziwy, ale zdąży on tego x zwiększyć o 1.

W efekcie wyświetlasz 1 + 0, czyli 1.

Y nie jest inkrementowany, bo przy operatorze and wystarczy, że jeden z argumentów jest równy zero, więc zmienna y nie została nawet tknięta. Tak mi się wydaję. :)
komentarz 26 września 2016 przez Ehlert Ekspert (214,220 p.)

Kiedy program sprawdza warunek, prawdopodobnie zdąży wykonać inkrementację dla x

To nie jest prawda.  

komentarz 26 września 2016 przez Surykat Stary wyjadacz (14,780 p.)
To jak to dokładnie jest?

Podobne pytania

0 głosów
5 odpowiedzi 884 wizyt
pytanie zadane 19 marca 2016 w C i C++ przez luparuwka Początkujący (400 p.)
0 głosów
2 odpowiedzi 2,412 wizyt
pytanie zadane 5 stycznia 2017 w C i C++ przez Niebieski_Zerg Użytkownik (610 p.)
0 głosów
1 odpowiedź 134 wizyt
pytanie zadane 16 lutego 2017 w JavaScript przez KONDZIU Użytkownik (550 p.)

93,020 zapytań

141,985 odpowiedzi

321,284 komentarzy

62,366 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...