Non ne ho trovato uno, ma ho difficoltà a credere che non ce ne sia nessuno.Esiste una funzione XOR logica (booleana) nella libreria standard C o C++?
risposta
XOR booleano è la stessa cosa di !=
, "non uguale".
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
Se siete alla ricerca di se due valori sono identici, è possibile utilizzare !=
o l'operatore bit a bit ^
. Puoi usare questo se i tuoi valori sono già bool
. Tuttavia, se i valori non sono puramente bool
, li getteranno a bool
prima:
((bool)myVal)!=((bool)myOtherVal)
((bool)myVal)^((bool)myOtherVal)
//either works
Sei assolutamente sicuro che il secondo funziona? Lo standard dice che tutte le variabili 'bool' che valutano lo stesso valore sono uguali a bit? –
Non sono sicuro dello standard; funziona in MinGW su Windows. – IanPudney
Ciò non significa assolutamente nulla. –
Wow, ho completamente perso questo ... Grazie. –
Non sono d'accordo. L'espressione '1! = 2' restituisce' true', ma '1 XOR 2' è decisamente falso, poiché sia 1 che 2 sono' true'. Per usare l'operatore! = Come XOR, devi prima eseguire il cast di 'bool'. – IanPudney
@quinxorin: è una sciocchezza. Ho chiesto di _logical_ XOR, 1 e 2 non sono valori _logical_. In C++, logico significa 'bool'. –