Verständnisproblem Inkrement & Dekrement
-
Hi Leute, ich hab wiedermal ein Verständnisproblem

Ich lerne gerade für einen kleinen Test und bei den Übungsbeispielen ist mir eins untergekommen wo ich nicht durchblicke:
#include <iostream> using namespace std; int main() { int k=1, m=0, n=1; if ((--k&&n--)||--m) cout << "JA"; else cout << "NEIN"; cout << k << m << n; return 0; }Lösung: JA0-11 (Es geht hier nur um die Ausgabe des Programms)
Soweit ich das verstanden habe wird bei --k zuerst k um 1 verringert, ist jetzt also 0, und dann erst wird der Wert zum Vergleich "weitergegeben". Bei n-- wird zuerst der Wert bereitgestellt, dann wird er um 1 verringert. Demnach dürfte die Bedingung in der inneren Klammer nicht true sein, die zweite Bedingung aber auch nicht (außer der Wert -1 ist in so einem Fall äquivalent zu 1). Und wieso die letzte Ausgabe (also n) 1 ist ist mir auch unverständlich..

Bitte entschuldigt Anfänger Fehler, genau das bin ich nämlich :p
Cheers,
Flügelnuss
-
if prüft auf true/false, nicht auf 1/0. 0 ist false, alles andere true.
-
-
haywire schrieb:
http://en.wikipedia.org/wiki/Short-circuit_evaluation kennst du?
Deswegen macht man so etwas
if ((--k&&n--)||--m)nicht. Je nach Werten macht das unterschiedliche Dinge.