Codezeile mit verkürzter if-, else-Anweisung
-
Hallo,
ich habe hier eine Codezeile die ich nicht ganz verstehe. Ich weiß zwar, dass es sich dabei um eine if-, else-Anweisung in Kurzform handelt, aber ich kann die Zeile 2 einfach nicht nachvollziehen. Das Ergebnis lautet: 322
unsigned x=1, y=2, z=4;
x+=(y?(z>>=x):y);
printf("\n%d %d %d", x,y,z);Wäre super, wenn mir jemand diese Zeile erklären könnte.
Beste Grüße
Martin
-
Hi,
Das ist der ?-Operator. Seine Syntax lautet:Bedingung ? Anweisung1 : Anweisung2
Wenn die Bedingung true ist, dann wird Anweisung1 ausgeführt, andernfalls Anweisung2.
In deinem Beispiel wird geprüft, ob y != false. Dies ist der Fall. Deshalb wird z, dessen Bits um eins nach rechts verschoben werden (z>>=x) an x zugewiesen (x+=z). Wäre y == false, würde x den Wert von y hinzuaddiert bekommen. (x+=y).
Gruß, Caipi
-
Nennt sich auch ternärer Operator, das Ding.
-
Vielen Dank für die super schnelle Antwort.
Leider ist mir das noch ein wenig zu kryptisch. Bin leider nich so die Leuchte beim Proggen. Vielleicht könnt ihr mir das an Hand der Zahlenbeispiele erklären. Dann verstehe ich das bestimmt besser. Danke!
-
slegde schrieb:
Vielleicht könnt ihr mir das an Hand der Zahlenbeispiele erklären. Dann verstehe ich das bestimmt besser. Danke!
unsigned x=1, y=2, z=4; x+=(y?(z>>=x):y);
y ist !=0, also wird in der klammer das z>>=x berechnet, also z=z>>1 , z war vorher 4 und ist danach 2. diese 2 wird danach zu x addiert, wegen des x+=(...), also ist x dann 3.
am ende siehts dann so aus: x=3, y=2 und z=2
-
Vielen Dank! So hilft mir das schon viel weiter!
Gruß
Martin