Suche logischen xor_operator



  • Gibt es eine Bibliothek, die einige zusätzliche logische Operatoren anbietet?
    Ich würde nämlich zur Zeit häufig ein logisches exklusives Oder benötigen, aber leider gibt es scheinbar nur && sowie ||. Nicht den Bitweisen xor! Den meine ich nicht! Thx für Tipps.



  • Naja, den logischen XOR gibt's vermutlich deshalb nicht, weil er keine "Kurzschlusssemantik" wie AND oder OR haben kann. Man muss /immer/ beide Ausdrücke auswerten.



  • Dafür kannst du einfach != nehmen. Wenn zwei verschiedene Werte vorkommen, ist der Ausdruck wahr (also auschliessendes Oder, XOR).



  • ähem ^

    das ist doch xor doer nicht?

    oder ^^ kA...



  • != ist eigentlich der Ungleich-Operator (aber ist beim Vergleich von boolschen Ausdrücken gleichwertig wie XOR). Aber wenn du zum Beispiel Integers vergleichst, gibt != einfach an, ob die zwei Zahlen unterschiedlich sind.



  • .filmor schrieb:

    Naja, den logischen XOR gibt's vermutlich deshalb nicht, weil er keine "Kurzschlusssemantik" wie AND oder OR haben kann. Man muss /immer/ beide Ausdrücke auswerten.

    Wieso gibt's dann ein logisches 'nicht'? 😉



  • Konrad Rudolph schrieb:

    .filmor schrieb:

    Naja, den logischen XOR gibt's vermutlich deshalb nicht, weil er keine "Kurzschlusssemantik" wie AND oder OR haben kann. Man muss /immer/ beide Ausdrücke auswerten.

    Wieso gibt's dann ein logisches 'nicht'? 😉

    Na, mal nicht frech werden, ich denke du weißt, wie das gemeint war 😉



  • Wie genau verhindert der NOT operator short circuit Evaluation?

    Logisches XOR verlangt das immer beide Ausdruecke ausgewertet werden. Wenn man das will, kann man einfach != schreiben. && und || bieten aber short circuit an um nur die notwendigen tests durchzufuehren. Ein NOT aendert da garnix.



  • Shade Of Mine schrieb:

    Wie genau verhindert der NOT operator short circuit Evaluation?

    Logisches XOR verlangt das immer beide Ausdruecke ausgewertet werden.

    Eben. Und „not“ verlangt auch, dass alle beteiligten Ausdrücke ausgewertet werden. Das ist halt nur einer.

    Man könnte sich das „not“ schließlich auch sparen und stattdessen das Einerkomplement verwenden, und dann wie in VB den 'true'-Wert als -1 darstellen.

    So, und jetzt nochmal deutlicher: Das war ein Schärz.



  • Besten Dank. Zur Zeit mühe ich mich, ein Programm zu schreiben, das einen Text aus der natürlichen Sprache in eine formalisierte Sprache übersetzt. Zielsetzung: Das Programm soll einfache direkte Beweise für Sätze hinbekommen, die in natürlicher Sprache formuliert sind.



  • Und das in C++? Gewagt …



  • Hallo,

    ich weiß, der Thread ist schon etwas älter aber da ich im Prinzip das selbe Problem habe, stelle ich meine Frage hier.

    Im Prinzip bin ich auch auf der Suche nach einem logischen XOR. Allerdings ist bei mir der Grund, dass ich ein XOR auf mehrere Operanden anwenden möchte und eine Schachtelung wie XOR(XOR(a,b),c) ist einfach schwierig zu lesen.

    (a != b != c) dürfte auch zu einigen Verwirrungen führen, zumal ich mir nicht sicher wäre, dass das immer unter allen Umständen funktioniert.

    Gibt es vielleicht eine Möglichkeit einen "Pseudooperators" über ein Define zu erzeugen? Ich habe in die Richtung leider nichts gefunden. Aber im Prinzip suche ich in diesem Zusammenhang nach einem Define o.ä. was z.B. a XOR b auf XorFunction(a,b) abbildet.

    Ansonten könnte man natürlich XOR einfach auf != abbilden, aber ich hätte dabei Bauchschmerzen, da TRUE und FALSE ja immer noch nur Abbildungen auf Eins und Null sind und letztendlich alles ungleich Null einfach wahr ist...

    Oder sehe ich das zu kompliziert und die C/C++-Operatoren && bzw. || funktionieren ebenfalls nur mit Eins und Null?

    Vielleicht hat da ja einer eine Idee oder kann mich einfach schlauer machen 🙂

    Fröhliche Grüße,
    Torge



  • erstmal schauen, wo in der rangfolge der operatoren dein XOR landen soll. vielleicht bei ^? ich machs mal bei ^.

    #define XOR ^foo()^
    

    foo() gibt einen XorProxy zurück und für den XorProxy überladenen operatoren ^ machen den rest.



  • Gibt es eine Bibliothek, die einige zusätzliche logische Operatoren anbietet?

    Warum, das kann man doch aus Not (!), And (&&() und Or(||) nachbilden. Not, And ( und Or) werden gebraucht, da sie eine (minimale) Basis der boolschen Funktionen bilden.

    Naja, den logischen XOR gibt's vermutlich deshalb nicht, weil er keine "Kurzschlusssemantik" ...

    Falsch!



  • knivil schrieb:

    Gibt es eine Bibliothek, die einige zusätzliche logische Operatoren anbietet?

    Warum, das kann man doch aus Not (!), And (&&() und Or(||) nachbilden. Not, And ( und Or) werden gebraucht, da sie eine (minimale) Basis der boolschen Funktionen bilden.

    Or ist völlig nutzlos.



  • Or ist völlig nutzlos.

    Sollte auch in Klammern stehen, aber deswegen ist es nicht zwingend nutzlos. Ich will mein Oder-Ausdruck nicht staendig Mit NAnd und Konstante schreiben. Das logische XOr hat halt Pech, da es selten benutzt wird und deswegen kein Extrawurst bekommt.



  • knivil schrieb:

    Naja, den logischen XOR gibt's vermutlich deshalb nicht, weil er keine "Kurzschlusssemantik" ...

    Falsch!

    Beweise. Und erklär vor allem erstmal welche der beiden zitierten Aussagen falsch sein soll.

    Im Übrigen dürfte man für ein boolsches XOR einfach das binäre xor verwenden können, vorausgesetzt es gibt für true und false jeweis nur eine binäre Darstellung (was meines Wissens der Fall ist, hab aber grad den Standard nicht zur Hand).



  • was spricht nochmal gegen != ?



  • Shade Of Mine schrieb:

    was spricht nochmal gegen != ?

    Ist zu einfach, so wie in deinem Thread ntfs-3g.



  • Shade Of Mine schrieb:

    was spricht nochmal gegen != ?

    es ist nicht a!=b gesucht, sondern bool(a)!=bool(b) oder um das machZuBoolFürMsvcNutzer-idiom !! zu verwenden !!a!=!!b, ohne bool() oder !! wärs zu unsicher, nehmen wir mal !a!=!b. aber das ist den mädels zu schwer zu schreiben oder zu lesen oder so.


Anmelden zum Antworten