C++ (Operanden, Operator, logische Ausdrücke) eine kleine Frage



  • Hey,
    ich lerne grade. Jedoch verstehe ich eine Sache nicht und zwar folgendes:

    bool wert,
    int a, b, c;
    
    wert = ++a || ++b && ++c;
    

    Was bedeutet
    [code="cpp"]

    wert = ++a || ++b && ++c;
    [/code]

    Ich komme einfach nicht drauf! Bitte helfen!!! 😞 😕 😡



  • Sorry, es sollte so sein:

    [code="cpp"]
    wert = ++a || ++b && ++c;
    [/code]



  • Was ist denn los? Irgendwie geht Code-einfügen bei:

    wert = ++a || ++b && ++c;

    nicht.



  • yellow123 schrieb:

    Was ist denn los? Irgendwie geht Code-einfügen bei:

    wert = ++a || ++b && ++c;

    nicht.

    Das liegt daran dass die Fett-Tasg und die Code-Tags sich nicht gut vertragen.

    Das logische Und bindet stärker als das logische Oder. Verstehst du es jetzt?



  • Der Code ist ziemlich komplex, weil er recht viel gleichzeitig macht.

    Würde man das in einzelne Aktionen aufschlüsseln käme da raus:

    if (++a)
    	wert = true;
    else	// a != 0
    {
    	if (++b)
    	{
    		if (++c)
    			wert = true;
    		else // c != 0
    			wert = false;
    	}
    	else	// b!=0
    		wert = false;
    }
    

    Als erstes wird ++a berechnet, also a um 1 erhöht und der neue Wert wird verglichen.
    Wenn er 1 ist, ist auch das Ergebnis des Oder-Operators 1 und der rechte Teil wird nicht ausgeführt.
    Das gleiche gilt auch für den Und-operator, nur da ist es so, dass der rechte Teil weggelassen wird, wenn der erste Operand 0 hat.

    Normalerweise verwendet man die Operatoren nur in Vergleichen, aber bei diesem Beispiel wird in den Operanden auch noch eine Aktion durchgeführt. Beim normalen Programmieren sollte man so etwas nicht verwenden, wenn aber doch, dann ausreichend kommentiert.



  • @Sone: Danke für die Aufklärung!!! Deine Antwort ist zwar kurz, aber ich habe sie
    begriffen

    @Merthog: Ok, danke. Ich habe das schon so geahnt, als ich mir das noch einmal richtig angeschaut habe. Durch deine Antwort hat sich meine Vermutung bestätigt, Danke!!!


Anmelden zum Antworten