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

Hosting forpsi easy 1 pln
0 głosów
258 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 (210,670 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,760 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 (210,670 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,760 p.)
To jak to dokładnie jest?

Podobne pytania

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

92,081 zapytań

140,737 odpowiedzi

317,697 komentarzy

61,401 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia w koszyku, uzyskując rabat aż -50% (w dniach 24.11 - 29.11 z okazji Black Friday, a potem będzie to -30%) na bilety w wersji "Standard"! Więcej informacji na temat akademii znajdziecie tutaj. Dziękujemy Sekurakowi za tak fajną zniżkę dla 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 15% 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!

...