logical - not en c#
¿Hay operador XNOR(Logic biconditional) en C#? (4)
Soy nuevo en C # y no pude encontrar el operador de XNOR para proporcionar esta tabla de verdad:
a b a XNOR b ---------------- T T T T F F F T F F F T
¿Hay un operador específico para esto? O necesito usar! (A ^ B)?
No, tienes que usar !(A^B)
Aunque supongo que podrías usar la sobrecarga del operador para hacer tu propio XNOR.
Puede usar el operador ===
para XNOR. Solo necesitas convertir b
en bool.
if (!!a === !!b) {...}
XNOR es simplemente igualdad en booleanos; usa A == B
Esto es algo fácil de perder, ya que la igualdad no se aplica comúnmente a los booleanos. Y hay idiomas en los que no necesariamente funcionará. Por ejemplo, en C, cualquier valor escalar distinto de cero se trata como verdadero, por lo que dos valores "verdaderos" pueden ser desiguales. Pero la pregunta fue etiquetada c# , que tiene, digamos, booleanos de buen comportamiento.
Tenga en cuenta también que esto no se generaliza a operaciones bit a bit, donde desea 0x1234 XNOR 0x5678 == 0xFFFFBBB3
(suponiendo 32 bits). Para eso, necesitas construir desde otras operaciones, como ~(A^B)
. (Nota: ~
, no !
)
XOR = A o B, pero no A & B ni ninguno (no puede ser igual [! =])
XNOR es por lo tanto el oponente exacto, y puede representarse fácilmente por == o ===.
Sin embargo, los casos no booleanos presentan problemas, como en este ejemplo:
a = 5
b = 1
if (a == b){
...
}
en cambio, usa esto:
a = 5
b = 1
if((a && b) || (!a && !b)){
...
}
o
if(!(a || b) && (a && b)){
...
}
el primer ejemplo devolverá falso (5! = 1), pero el segundo devolverá valores verdaderos (a [¿valor?] y b [valor?] devolverán el mismo valor booleano, verdadero (valor = no 0 / hay un valor) )
el ejemplo alternativo es solo la puerta invertida (a || b) &&! (a && b) (XOR)