Logisches XOR



  • Gibt es in C++ keinen Operator für ein logisches exklusives Oder?
    ^ ist ja nur für das bitweise XOR, wie mach ich es also, wenn ich z.B. zwei Bedingungen hab und nur eine davon zutreffen soll?

    bool a;
    bool b;
    
    if (a && !b || !a && b)   // Ich meine anstelle von dieser Schreibweise
    {
       // blablabla
    }
    


  • Wieso, geht doch auch mit bool?

    a=true;
    b=true;
    if (a^b) {
    	printf("Gilt nicht!");
    }
    
    a=true;
    b=false;
    if (a^b) {
    	printf("Gilt!");
    }
    


  • Demnach ist ^ sowohl für bitweise als auch für logische Operationen brauchbar?
    Danke, hätt ich nicht gewusst 😃



  • Demnach ist ^ sowohl für bitweise als auch für logische Operationen brauchbar?
    Danke, hätt ich nicht gewusst 😃

    Edit:
    Sry für Doppelpost, ich hab aus Versehen bei der Anzeige "Zum Forum zurückkehren / Post anzeigen" F5 gedrückt 🙄



  • der operator dafuer ist !=



  • Logisches Exklusiv-Oder gibt es in C++ nicht, weil es nicht möglich ist, dafür eine Shortcut-Semantik zu definieren. Man kann also nicht nach Betrachtung des ersten Operanden schon entscheiden, ob es sich lohnt, den zweiten auch noch zu betrachten, sondern man muss das immer tun.
    Ich glaube das ist eine FAQ auf Bjarne Stroustrups Homepage.



  • rapso schrieb:

    der operator dafuer ist !=

    Allerdings sollte hier beachtet werden, dass beide Operanden auch als bool vorliegen. 1 != 2 liefert zB ein anderes Ergebnis, als die logische xor Verknüpfung.



  • Bashar schrieb:

    Logisches Exklusiv-Oder gibt es in C++ nicht, weil es nicht möglich ist, dafür eine Shortcut-Semantik zu definieren. Man kann also nicht nach Betrachtung des ersten Operanden schon entscheiden, ob es sich lohnt, den zweiten auch noch zu betrachten, sondern man muss das immer tun.
    Ich glaube das ist eine FAQ auf Bjarne Stroustrups Homepage.

    und es gehört zum c++ konzept, nur logische operatoren, für die short branching möglich ist, zu erlauben? Oo



  • thordk schrieb:

    und es gehört zum c++ konzept, nur logische operatoren, für die short branching möglich ist, zu erlauben? Oo

    Was ist das C++-Konzept?



  • groovemaster schrieb:

    rapso schrieb:

    der operator dafuer ist !=

    Allerdings sollte hier beachtet werden, dass beide Operanden auch als bool vorliegen. 1 != 2 liefert zB ein anderes Ergebnis, als die logische xor Verknüpfung.

    und das trifft fuer andere operatoren wie &/&& oder |/|| nicht zu?
    da xor fuer logische dinge nicht wirklich definiert ist, muss man selbst interpretieren ob != das ist was man will. denn die ^ definitionen liefern verschiedene interpretierungsmoeglichkeiten, z.b. wenn beide operanten gleich sind, dann 0 sonst 1. und das wuerde bei 1!=2 zutreffen.



  • Vielen Dank für die Antworten! Ich glaube, mit dem ^-Operator fahre ich gut, da ich logische Operatoren eigentlich nur für Bool-Vergleiche benötige...
    Dass meine Frage eine solche Diskussion aufwerfen würde, hätte ich wirklich nicht gedacht 😉



  • Bashar schrieb:

    thordk schrieb:

    und es gehört zum c++ konzept, nur logische operatoren, für die short branching möglich ist, zu erlauben? Oo

    Was ist das C++-Konzept?

    der dünnpfiff aus stroustrups kopf 😃 im gegensatz zum in form gegossenen standard.



  • rapso schrieb:

    und das trifft fuer andere operatoren wie &/&& oder |/|| nicht zu?

    Nein, sofern wir von logischen Operatoren reden. Die Operanden für && und || werden bei Bedarf implizit nach bool gewandelt bevor die Verknüpfung stattfindet, das macht != nicht.

    rapso schrieb:

    denn die ^ definitionen liefern verschiedene interpretierungsmoeglichkeiten, z.b. wenn beide operanten gleich sind, dann 0 sonst 1. und das wuerde bei 1!=2 zutreffen.

    Siehe oben. 1 evaluiert zu true, genauso wie 2. Das Ergebnis einer logischen xor Verknüpfung muss daher false liefern, und nicht true.



  • Pass mal auf, wenn rapso das sagt, dann stimmt das auch. Also fuer ihn zumindest 😉

    Gruß, TGGC (making great games since 1992)



  • TGGC schrieb:

    Pass mal auf, wenn rapso das sagt, dann stimmt das auch. Also fuer ihn zumindest 😉

    langeweile? 🙄



  • Hörensohn 😮


Anmelden zum Antworten