Soy nuevo en C # y no pude encontrar el operador XNOR para proporcionar esta tabla de verdad:
aba XNOR b ---------------- TTT TFF FTF FFT
¿Hay un operador específico para esto? ¿O necesito usar! (A ^ B)?
Soy nuevo en C # y no pude encontrar el operador XNOR para proporcionar esta tabla de verdad:
aba XNOR b ---------------- TTT TFF FTF FFT
¿Hay un operador específico para esto? ¿O necesito usar! (A ^ B)?
Respuestas:
XNOR es simplemente igualdad en booleanos; uso A == B
.
Esto es algo fácil de perder, ya que la igualdad no se aplica comúnmente a los booleanos. Y hay idiomas donde 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 etiquetadaC#, que tiene, digamos, booleanos de buen comportamiento.
Tenga en cuenta también que esto no se generaliza a las operaciones bit a bit, donde lo desee 0x1234 XNOR 0x5678 == 0xFFFFBBB3
(suponiendo 32 bits). Para eso, necesitas construir desde otras operaciones, como ~(A^B)
. (Nota: ~
no !
)
!
el operador puede ser usado para convertir int
'S para booleanos 'buen comportamiento': !a==!b
.
!!
(que es dos "no" operadores lógicos) normaliza cualquier valor escalar a 0
o 1
.
XOR = A o B, pero no A y B o ninguno (No puede ser igual [! =])
XNOR es, por lo tanto, el opuesto exacto, y se puede representar fácilmente por == o ===.
Sin embargo, los casos no booleanos presentan problemas, como en este ejemplo:
a = 5
b = 1
if (a == b){
...
}
en su lugar, use 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á verdadero (los valores de a [valor?] yb [valor?] devuelven el mismo valor booleano, verdadero (valor = no 0 / hay un valor )
el ejemplo alternativo es solo la puerta invertida (a || b) &&! (a && b) (XOR)
No, necesitas usar !(A^B)
Aunque supongo que podría usar la sobrecarga del operador para hacer su propio XNOR.
Puede usar el ===
operador para XNOR. Solo necesitas convertir a
y b
bool.
if (!!a === !!b) {...}
===
operador
===
el operador no coercitivo es javascript y el doble !!
antes de un valor en una evaluación tampoco es válido en c #
==
operandos booleanos ...