Disyunción Exclusiva (XOR)

En lógica matemática, circuitos y programación suele ser muy usado los operadores lógicos, tenemos conjunción, disyunción inclusiva, disyunción exclusiva, negación (más información operadores lógicos)

Definición: El operador lógico disyunción exclusiva nos dice que dadas dos proposiciones a y b, obtenemos un valor verdadero al aplicar el operador sí y solamente sí:

  • La proposición a tiene un valor de  verdad Verdadero y la proposición b un valor de verdad Falso.
  • La proposición a tiene un valor de verdad falso y la proposición b un valor de verdad verdadero.

A continuación la tabla de verdad de dicho operador lógico:

a b a v b
0 0 0
0 1 1
1 0 1
1 1 0

    Tabla 1: Tabla de verdad del operador lógico XOR

Equivalencia

Una manera de representar la disyunción exclusiva es usando disyunciones y conjunciones de la siguiente manera.

         (a ^ ¬b) v (¬a ^ b)

Ejemplos en la vida cotidiana

  • Estoy en Quito o estoy en Guayaquil.
  • Trabajo o voy al cine.
  • Como o duermo.
  • Mañana le presto el libro a María o le presto a José.

Como podemos observar en las oraciones, son acciones que solo se puede realizar una a la vez, como en el caso de la primera oración, no podemos estar en dos lugares al mismo tiempo.

Operador Disyunción Exclusiva en JAVA

Si el lector(a) no está interesado, puede obviar las siguientes líneas ya que es el uso de lo expuesto anteriormente en el lenguaje de programación JAVA.

En días anteriores he estado leyendo Introduction to JAVA Programming Comprehensive 8th edition por Y. Daniel Liang el cual me parece un texto muy interesante, he empezado la lectura del libro desde el inicio, tomando en cuenta que tengo bases de conocimientos en JAVA, en el capítulo 3 Selections encontré una tabla con los operadores lógicos, de los cuales dado los cursos de programación que he cursado, apuntes en la web, e-books, y  libros físicos de la universidad pensé que los conocía todos, cuando ¡oh, sorpresa!

Encontré un operador que realiza el trabajo de la disyunción exclusiva, anteriormente me había tocado en proyectos o ejercicios usar la equivalencia con conjunciones y disyunciones llevando mis expresiones a la forma (a &&  != b)  ||  (!= a  && b) de la sintaxis de java, una ventaja de dicho operador es que ya no debemos llevar a la forma equivalente y la lectura del código es un poco más fácil.

El operador Disyunción exclusiva es representado en java por el símbolo: ^.

Sintaxis: a ^ b

Ejemplos del uso de la Disyunción Exclusiva en programación

  • La Compañía XYZ ofrecerá descuentos a sus clientes afiliados de categoría A y con residencia en Guayaquil o a sus clientes de categoría B con residencia en Quito.
    • Como podemos ver un cliente de categoría A solo tiene un lugar de residencia registrado en  los datos de la compañía XYZ.
  • Si un dígito de el boleto de lotería comprado por un usuario coincide con un dígito en el boleto ganador, el premio es de $1000, (para efectos prácticos un boleto de lotería va desde el (000 al 999)
    • Vemos otro uso de la disyunción exclusiva ya que se pueden presentar los siguientes resultados (Ejercicio 3.15, Introduction to JAVA Programming) :

gameLottery

Boleto de Lotería Boleto Ganador
dígito 1 dígito ganador 1
dígito 1 dígito ganador 2
dígito 1 dígito ganador 3
dígito 2 dígito ganador 1
dígito 2 dígito ganador 2
dígito 2 dígito ganador 3
dígito 3 dígito ganador 1
dígito 3 dígito ganador 2
dígito 3 dígito ganador 3
Tabla 2: Resultados posibles de el problema de la lotería.

Dada la condición que, para ganar el premio de $1000 sólo debe coincidir un dígito con el boleto ganador, usamos una disyunción exclusiva para omitir los casos en el que el boleto ganador y el boleto de lotería coincidan en dos ocasiones, una implementación en java sobre la parte de coincidencia de un dígito en la lotería es la siguiente:

if( (d1 == dbg1 || d1 == dbg2 || d1 == dbg3)   ^ (d2 == dbg1 || d2 == dbg2 || d2 == dbg3) ^ (d3 == dbg1  || d3 == dbg2 || d3 == dbg3))
System.out.println( “Felicitaciones, GANASTE $1000″);

donde d1,d2,d3 son dígitos1, dígito2, dígito3 de el boleto de lotería respectivamente,  dbg1, dbg2, dbg3

Como podemos observar el uso del operador disyunción exclusiva nos evita a usar la forma equivalente y evitar confusiones al escribir el código.

About these ads

2 pensamientos en “Disyunción Exclusiva (XOR)

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s