Ich habe keins gefunden, aber es fällt mir schwer zu glauben, dass es keines gibt.Gibt es eine logische (boolesche) XOR-Funktion in der C- oder C++ - Standardbibliothek?
Antwort
Booleschen XOR ist das gleiche wie !=
, "nicht gleich."
p | q | p != q
--+---+-------
F | F | F
T | F | T
F | T | T
T | T | F
http://en.wikipedia.org/wiki/Truth_table#Logical_conjunction
Wenn Sie suchen sind, ob zwei Werte identisch sind, können Sie !=
oder das bitweise Operator ^
verwenden. Sie können dies verwenden, wenn Ihre Werte bereits bool
sind. Allerdings, wenn Ihre Werte nicht rein bool
sind, werfen sie bool
zuerst:
((bool)myVal)!=((bool)myOtherVal)
((bool)myVal)^((bool)myOtherVal)
//either works
Sind Sie absolut sicher, dass die zweite funktioniert? Stimmt der Standard, dass alle 'bool'-Variablen, die denselben Wert ergeben, bitweise gleich sind? –
Ich bin unsicher über den Standard; Es funktioniert in MinGW unter Windows. – IanPudney
Das bedeutet gar nichts. –
Wow, ich total verpasst dieses ... Danke. –
Ich stimme nicht zu. Der Ausdruck "1! = 2" ergibt "wahr", aber "1 XOR 2" ist definitiv falsch, da sowohl 1 als auch 2 "wahr" sind. Um den Operator! = Als XOR zu verwenden, müssen Sie zuerst nach 'bool' umwandeln. – IanPudney
@quinxorin: das ist Unsinn. Ich fragte nach _logical_ XOR, 1 und 2 sind nicht _logical_ Werte. In C++ bedeutet logisch "bool". –