if anweisung
-
Nein es wird erst geschaut ob i!=0 ist und auf jedenfall inkrementiert!!!
-
orioon schrieb:
das if ist true, i wird est inkrementiert und dann geschaut ob !0
Versteh ich nicht.
Was passier ist folgendes:
Deine condition lautet (i++ && j++) - welche als wahr ausgewertet wird, wenn sowohl i++ als auch j++ wahr sind. Da i und j vom Typ integer sind ist dies der Fall wenn sie ungleich 0 sind. Also wird erstmal i++ ausgewertet - es handelt sich um den postincrement-operator.
Dieser inkrementiert den Wert, gibt aber den Wert vor der Inkrementation zurück.
Da i vorher 0 war, wird 0 züruckgegeben - was false entspricht.
Da nun die condition nicht mehr wahr werden kann, wird j++ nicht ausgewertet und auch das i++ im block-statement nicht mehr.Die Variablen haben nun also die Werte i = 1 und j = 2.
Du siehst - alles ist korrekt.
-
alles klar
dh wenn ich aus dem i++ ein ++i machn würde , wäre das ergebnis 2 3 oder ?
-
Genau so ist es.
-
orioon schrieb:
das if ist true, i wird est inkrementiert und dann geschaut ob !0
Falsch, i++ ist Postinkrement.
Das if istfalse, das i wird ausgewertet und "++ vorgemerkt" makiert. i ist aber 0(false), die Schleifenbedingung ist alsofalseund am Ende wird i inkrementiert.Nexus schrieb:
kantaki schrieb:
du meinst i++ im schleifenkopf ist false weil i = 0 ist ?
Ja. Aber ich sehe hier nirgends eine Schleife.
kennst du nicht: http://if-schleife.de/
kantaki schrieb:
alles klar
dh wenn ich aus dem i++ ein ++i machn würde , wäre das ergebnis 2 3 oder ?Ja
-
kantaki schrieb:
int i = 0, j = 2; if (i++ && j++) { // ab dem zeitpunkt müsste doch i = 1 und j = 3 sein i++; // und hier i = 2 und j = 3 } cout << i << j;Folgender Code ist äquivalent zu Deinem:
int i = 0, j = 2; int oldi = i; ++i; if (oldi) { int oldj = j; ++j; if (oldj) { ++i; } }Warum?
1. post-fix ++ erhört immer den Wert, den die Variable speichert, liefert aber den alten Wert zurück.
2. && ist ein kurzschließendes, logisches UND ist. Das heißt, der zweite Operand wird gar nicht erst ausgewertet, falls der erste schon false ist.
-
ups, selber reingefallen

-
danke ihr habt mir sehr geholfen.
-
hi,
&& Operator hat vorrang und i ist zum zeitpunkt false "0"
probiere es mal mit 1 und 3 oder 4 und 6 usw
mfg
-
foxviper schrieb:
&& Operator hat vorrang und i ist zum zeitpunkt false "0"
&&ist im Ausdrucki++ && j++der Operator mit der niedrigsten Priorität. Oder meinst du, er wird vor dem zweiten++ausgeführt?
-
foxviper schrieb:
hi,
&& Operator hat vorrang und i ist zum zeitpunkt false "0"
probiere es mal mit 1 und 3 oder 4 und 6 usw
mfg
&& (logisches UND) ist sogut wie ganz unten in der Prioritätenreihenfolge, während die postfix-operatoren ziemlich weit oben sind.
Siehe: http://www.cppreference.com/wiki//language/operator_precedence?redirect=1
P.S.: zackzefix - entweder muss ich noch schneller tippen oder keine links raussuchen
