Ausdrücke und Anweisungen (Verständnissfrage)
-
Also ich habe ein kleines Problem, zuerst dachte ich das es eine klare Sache ist. Löste die Aufgabe und überprüfte sie dann noch mal in dem Kompiler.
if(2 < 4 || 2 - 3 < 0 && 2 >= 7)
(Kompiler sagt => True)
2.
if(2 - 3 != 0 && 3 % 2 == 1)
(Kompiler sagt => True)
3.
float x = 1 + 1 / 2
(Kompiler sagt => x = 1 )1. OK || hat eine höhere Priorität als && das hab ich ja noch akzeptiert
2. War ich auch mit einverstanden
3. Ich wäre jede Wette eingegangen das dort als Ergebniss 1.5 raus kommt ( da / eine höhere Priorität hat als + )
Oder wird da nun doch von links nach rechts gerechnet ? ( also ich habs anders in erinnerung )Hab ich da nur etwas falsch in erinnerung oder ist jemand so nett und erklärt es mir
-
Versuch es mal so, dann sollte es funktionieren:
float x = 1 + 1.0 / 2
Das Problem ist, dass du mit int-Werten rechnest, dabei wird 1/2 zu 0. Erst bei der Zuweisung/Initialisierung wird ein float daraus und dann ist das Ergebnis schon "falsch".
"Punkt vor Strich" gilt natürlich. Das Ergebnis bleibt z.B. dasselbe, wenn du Klammern setzt:float x = 1 + (1 / 2)
-
Ah vielen dank, und das ||eine höhere Priorität als && ist auch richtig ?
-
Nein, ist genau andersherum, du könntest also so schreiben:
if(2 < 4 || (2 - 3 < 0 && 2 >= 7))
Der "UND-Ausdruck wird zuerst ausgewertet, ergibt false, 2<4 ergibt true, ergibt insgesamt true.
Edit: Hier kannst du die Priorität der Operatoren nochmal nachschauen:
http://de.wikibooks.org/wiki/C++-Programmierung:_Liste_der_Operatoren_nach_Priorität