x++ und ++x?
-
Ich würde micht versuhcen demn Ausdruck --x einen WErt zuzuweisen images/smiles/icon_biggrin.gif
-
--x == x-- -1;
ich wuerde sagen nein images/smiles/icon_wink.gif
denn das ist ja die kurzschreibweise fuer
x=x-1;
x==x-1;
x=x-1;und x ist definitive ungleich x-1
allerdings wuerde ich sagen dass sie semantisch aequvalent sind images/smiles/icon_smile.gif
beispiel:--x==y;
lange form:
x=x-1;
x==yx-- -1==y;
lange form:
x-1==y
x=x-1;bei beiden variante wird das um 1 verringerte x mit y verglichen und danach hat x den wert von x-1...
also semantisch gleich...
-
hier noch mal was von mir images/smiles/icon_wink.gif
also wenn da steht :
a=b++;
dann wird a zuerst der wert von b zu gewiesen und b wird dann um eins inkremitiert
schreibt man abera=++b;
wird b zuerst um 1 inkrementiert und dann wird a der wert von b zu gewiesen images/smiles/icon_smile.gif
doppelt gemoppelt gehts aber net images/smiles/icon_wink.gif
also a=++b++; geht net !!
also ich denk jetzt dürften auch die 2 letzen beispiele mit ein wenig logischen denken gemeistert werden images/smiles/icon_wink.gif
-
Original erstellt von Kauz01:
Ich würde micht versuhcen demn Ausdruck --x einen WErt zuzuweisen images/smiles/icon_biggrin.gifWarum?
--x ist doch ein lvalue.
--x-- geht deshalb nicht, weil rechte Operatoren meistens vor linken ausgewertet werden.
--(x--) geht also net.
Bei (--x)-- seh ich kein Problem.
-
Original erstellt von Shade Of Mine:
**--x == x-- -1;
ich wuerde sagen nein images/smiles/icon_wink.gif
**Ich auch.
Ich wollte ja nur
--x == x-- -1;
compilieren und dann schauen, ob ich --x durch (x-- - 1)
ersetzen kann und es kommt das gleiche raus.
-
dann sind wir ja der selben meinung, volkard images/smiles/icon_wink.gif
-
@virtual volkard
Weißt du ob bei "--x == x-- -1;" die Evaluationsreiehnfolge festgelegt ist?
Ob --x das gleiche wie x-- -1 ist kriegst du auf diese Art aber nicht raus!
Bsp.:int x = 2;
--x == x-- - 1;
// Hier ist x sicher == 0
-
also wenn x 2 ist dann ist --x =1 !! weil das das selbe ist wie x-- !!
nur wenn das -- vor x steht wird sie als erstes aus gewertet ! wenn -- nach x steht wirds erst als letztes ausgewertet!
int a=10;
int b;b=a++;
hier ist a 11 und b 10 weil b erst der wert von a zugewiesen wird und dann wird a inkrementiert !bei b=++a;
wird erst a inkrementiert und dann wird der wert von dem dann inkrementierten a b zugewiesen !!! alost ist a 11 und b 11 !!
deshalb ist --x != x-- -1 !!
[ 10.10.2001: Beitrag editiert von: mauerranger ]
-
Nochmal ein kleiner Beitrag
int a1,b1,a2,b2;
a1 = b1 = 2;a2 = a1-- - 1; // a2 == 1
b2 = --b1; // b2 == 1Soweit gut?
a1-- - 1 == --b1 hat also den Wert true.
Aber
(--x == x-- -1 ) hat sicher den Wert false!
Begründung:
Eine Seite wird als erstes evaluiert. Soweit ich weiß ist hier keine Reihenfolge festgelegt. Damit wird der Wert von x verändert! Dann wird die zweite Seite evaluiert und der Wert von x nochmals verändert. Nach dem Statement ist also der Wert von x um 2 gesunken.
Weiter hat der als erstes ausgewertete Ausdruck einen Wert, der um 1 größer ist, als der zuletzt ausgewertete Ausdruck.Einwände werden entgegengenommen. images/smiles/icon_smile.gif
-
@kauz
genau dass haben doch volkard und ich schon festgestellt images/smiles/icon_wink.gif@mauerranger
ja, wir kennen die pre- und post incerement/decrement operatoren images/smiles/icon_wink.gif