• 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.

Object Storage Arubacloud
0 głosów
275 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 (212,790 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 (212,790 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 761 wizyt
pytanie zadane 19 marca 2016 w C i C++ przez luparuwka Początkujący (400 p.)
0 głosów
2 odpowiedzi 2,184 wizyt
pytanie zadane 5 stycznia 2017 w C i C++ przez Niebieski_Zerg Użytkownik (610 p.)
0 głosów
1 odpowiedź 120 wizyt
pytanie zadane 16 lutego 2017 w JavaScript przez KONDZIU Użytkownik (550 p.)

92,632 zapytań

141,500 odpowiedzi

319,879 komentarzy

62,012 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!

...