Logisches XOR
-
Warum gibt es in C++ kein Logisches XOR? Wie setzt man dies in C++ um ?
-
ein logisches XOR gibts aus verschiedenen Gründen nicht. Einerseits braucht man das nicht unbedingt häufig, und andererseits ist mit XOR keine Kurzschlußauswertung möglich, da das Gesamtergebnis immer erst feststeht, nachdem beide Operanden ausgewertet wurden. Man kann es aber als Funktion implementieren:
template<typename T1, typename T2> bool log_xor(T1 const& t1, T2 const& t2) { return (bool)t1 != (bool)t2; // oder return t1 && !t2 || !t1 && t2; }
-
Gibt doch ein ^ - Operator (deshalb einstellig, weil er eben beide Seiten auswerten muss)??
Verstehe ich des jetzt total falsch? Ich hab den schon mehrmals erfolgreich eingesetzt -.-
-
^ ist bitweises xor
-
Natürlich braucht man das öfters:
Setzen eines Bits mit OR und Löschen eines Bits mit XOR.
-
Achtung: Bitweise != Logisch
-junix
-
Ausserdem löscht man Bits nicht mit XOR sondern mit AND.
-
Nicht umbedingt. Wenn man den rest einer Variable gleich lassen will und nur ein einziges bit setzen will (z.B. in einem int) dann wüsst ich nich wie das mit and gehen soll
-
int bla_int = 0xAAAA; // Value: 0b1010101010101010 bla_int &= ~0x80; // Mask: 0b0000000010000000 (0x80 noch nicht invertiert) // ^ // |-- dieses Bit töten // nu enthält "bla_int" nur noch den Wert 0xAA2A bzw. 0b1010101000101010
Hach ich liebe Digitaltechnik.
-junix
<edit>Achja. Setzen auf 1 würde man das Ganze dann mit einem "Bitwise or" ('|') und der nicht invertierten Maske</edit>