unario ternario poner operator operadores operador logicos entonces ejemplos comparaciones como c# operators xor boolean-operations

ternario - operadores logicos c# ejemplos



Condicional XOR? (10)

El xor condicional no existe, pero puede usar uno lógico porque xor está definido para booleanos, y todas las comparaciones condicionales se evalúan como booleanos.

Así que puedes decir algo como:

if ( (a == b) ^ (c == d)) { }

¿Cómo es que C # no tiene un operador XOR condicional?

Ejemplo:

true xor false = true true xor true = false false xor false = false


En C #, los operadores condicionales solo ejecutan su operando secundario si es necesario .

Dado que un XOR debe, por definición, probar ambos valores, una versión condicional sería tonta.

Ejemplos :

  • Y lógico: & - prueba ambos lados cada vez.

  • O lógico: | - Prueba ambos lados cada vez.

  • Condicional AND: && : solo prueba el segundo lado si el primer lado es verdadero.

  • OR condicional: || - solo prueba el segundo lado si el primero es falso.


Esta pregunta ha sido respondida afectivamente, pero me encontré con una situación diferente. Es cierto que no hay necesidad de un XOR condicional. También es cierto que se puede utilizar el operador ^ Sin embargo, si solo necesita probar el estado "verdadero || falso" de los operandos, ^ puede llevar a problemas. Por ejemplo:

void Turn(int left, int right) { if (left ^ right) { //success... turn the car left or right... } else { //error... no turn or both left AND right are set... } }

En este ejemplo, si la izquierda se establece en 10 (0xa) y la derecha se establece en 5 (0x5), se ingresa la rama "éxito". Para este ejemplo (simplista si es tonto), esto resultaría en un error ya que no debes girar a la izquierda Y a la derecha al mismo tiempo. Lo que obtuve del interrogador no es que en realidad quería un condicional, sino una forma sencilla de realizar el verdadero / falso en los valores que se pasaron al xor.

Una macro podría hacer el truco:

#define my_xor(a, b) ( ((a)?1:0) ^ ((b)?1:0) )

Siéntase libre de abofetearme si estoy fuera de lugar: o)

Leí la respuesta de jimreed a continuación después de que publiqué este (¡mal Yapdog!) Y en realidad es más simple. Funcionaría y no tengo la menor idea de por qué su respuesta fue rechazada ...



La pregunta está un poco desactualizada pero ...

Es cómo debería funcionar este operador:

true xor false = true true xor true = false false xor false = false

Así es como el operador = = trabaja con tipos bool:

(true != false) // true (true != true) // false (false != false) // false

Así que como ves inexistente ^^ puede ser reemplazado con existente !=


Oh sí, lo hace.

bool b1 = true; bool b2 = false; bool XOR = b1 ^ b2;


Según lo pedido por Mark L , aquí está la versión correcta:

Func<bool, bool, bool> XOR = (X,Y) => ((!X) && Y) || (X && (!Y));

Aquí está la tabla de verdad:

X | Y | Result ============== 0 | 0 | 0 1 | 0 | 1 0 | 1 | 1 1 | 1 | 0

Referencia: Exclusiva O


Si bien hay un operador xor lógico ^ , no hay un operador xor condicional . Puede lograr un xor condicional de dos valores A y B usando lo siguiente:

A ? (!B) : B

Los parens no son necesarios, pero los agregué para mayor claridad.

Como lo señala The Evil Greebo, esto evalúa ambas expresiones, pero xor no puede ser cortocircuitado como y y o .


Solo como una aclaración, el operador ^ trabaja tanto con tipos integrales como con bool.

Ver Operador ^ de MSDN (Referencia de C #) :

Los operadores binarios ^ están predefinidos para los tipos integrales y bool. Para los tipos integrales, ^ calcula el OR exclusivo en modo bit de sus operandos. Para los operandos bool, ^ calcula la lógica exclusiva o de sus operandos; es decir, el resultado es verdadero si y solo si uno de sus operandos es verdadero.

Tal vez la documentación haya cambiado desde 2011 cuando se hizo esta pregunta.


puedes usar:

a = b ^ c;

al igual que en c / c ++