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


Log in to reply