Operador XOR Bit a Bit en Java

JavaBeginner
Practicar Ahora

Introducción

El operador XOR es un operador bit a bit utilizado en Java para comparar bits individuales de los operandos. En Java, el operador XOR está representado por el símbolo de circunflejo (^). Se utiliza para comparar dos bits y devuelve true si y solo si los dos bits que se están comparando no son iguales.

Usando XOR con Tipos de Datos Primitivos

En Java, el operador XOR se puede utilizar con cualquier tipo de dato primitivo. Vamos a verificar la tabla de verdad del XOR utilizando tipos de datos primitivos.

public class XOR {
    public static void main(String[] args) {
        System.out.println("0 XOR 0: " + (0 ^ 0)); // Salida: 0
        System.out.println("0 XOR 1: " + (0 ^ 1)); // Salida: 1
        System.out.println("1 XOR 0: " + (1 ^ 0)); // Salida: 1
        System.out.print("1 XOR 1: " + (1 ^ 1)); // Salida: 0
    }
}

Para ejecutar el código, guárdelo en el archivo ~/proyecto/XOR.java, y ejecute los siguientes comandos en la terminal:

cd ~/proyecto/
javac XOR.java
java XOR

Usando XOR con Valores Booleanos

El XOR también puede trabajar con valores booleanos. Vamos a recrear la tabla utilizando booleanos true y false.

public class XOR {
    public static void main(String[] args) {
        System.out.println("False XOR False: " + (false ^ false)); // Salida: false
        System.out.println("False XOR True: " + (false ^ true)); // Salida: true
        System.out.println("True XOR False: " + (true ^ false)); // Salida: true
        System.out.print("True XOR True: " + (true ^ true)); // Salida: false
    }
}

Para ejecutar el código, guárdelo en el archivo ~/proyecto/XOR.java, y ejecute los siguientes comandos en la terminal:

cd ~/proyecto/
javac XOR.java
java XOR

Usando XOR con Valores Enteros

El operador XOR se puede utilizar en enteros que no son 0 o 1. El operador XOR trabajará en los bits individuales del equivalente binario del entero.

public class XOR {
    public static void main(String[] args) {
        System.out.println("9 XOR 15: " + (9 ^ 15)); // Salida: 6
        System.out.println("1 XOR 20: " + (1 ^ 20)); // Salida: 21
        System.out.println("7 XOR 7: " + (7 ^ 7)); // Salida: 0
        System.out.print("32 XOR 0: " + (32 ^ 0)); // Salida: 32
    }
}

Para ejecutar el código, guárdelo en el archivo ~/proyecto/XOR.java, y ejecute los siguientes comandos en la terminal:

cd ~/proyecto/
javac XOR.java
java XOR

Encontrando el Entero No Repetido usando XOR

El operador XOR también se puede utilizar para encontrar el entero no repetido en una matriz de enteros.

public class XOR {
    public static int nonRepeatingInteger(int[] numArray) {
        int xor = numArray[0];
        for (int i = 1; i < numArray.length; i++)
            xor = xor ^ numArray[i];
        return xor;
    }

    public static void main(String[] args) {
        int[] arr = {10, 12, 5, 6, 10, 6, 12};
        int nonRepeatingNum = nonRepeatingInteger(arr);
        System.out.print("El entero no repetido es: " + nonRepeatingNum);
    }
}

Para ejecutar el código, guárdelo en el archivo ~/proyecto/XOR.java, y ejecute los siguientes comandos en la terminal:

cd ~/proyecto/
javac XOR.java
java XOR

La salida será:

El entero no repetido es: 5

Encontrando la Operación XOR de Cadenas Binarias

El XOR solo funciona para tipos de datos primitivos. Sin embargo, podemos escribir nuestro propio método que use el operador XOR y algo de lógica adicional para encontrar el XOR de dos cadenas binarias.

public class XOR {
    public static String binaryStringXOR(String binStr1, String binStr2) {
        String xor = "";
        // agregando ceros para que las dos cadenas tengan la misma longitud
        if (binStr1.length() > binStr2.length()) {
            String temp = "";
            for (int i = 0; i < binStr1.length() - binStr2.length(); i++)
                temp += "0";
            binStr2 = temp + binStr2;
        } else if (binStr2.length() > binStr1.length()) {
            String temp = "";
            for (int i = 0; i < binStr2.length() - binStr1.length(); i++)
                temp += "0";
            binStr1 = temp + binStr1;
        }
        for (int i = 0; i < binStr1.length(); i++) {
            xor += binStr1.charAt(i) ^ binStr2.charAt(i);
        }
        return xor;
    }

    public static void main(String[] args) {
        System.out.println("1001 XOR 1111: " + binaryStringXOR("1001", "1111"));
        System.out.println("1 XOR 10100: " + binaryStringXOR("1", "10100"));
        System.out.println("0111 XOR 1: " + binaryStringXOR("0111", "1"));
        System.out.print("100000 XOR 0: " + binaryStringXOR("100000", "0"));
    }
}

Para ejecutar el código, guárdelo en el archivo ~/proyecto/XOR.java, y ejecute los siguientes comandos en la terminal:

cd ~/proyecto/
javac XOR.java
java XOR

La salida será:

1001 XOR 1111: 0110
1 XOR 10100: 10101
0111 XOR 1: 0110
100000 XOR 0: 100000

Resumen

En este laboratorio, aprendimos sobre los conceptos básicos de la operación XOR en Java. Hemos demostrado cómo se pueden utilizar los operadores XOR en los tipos de datos booleanos y enteros. También hemos implementado un método para encontrar el XOR de dos cadenas binarias y un método para encontrar el entero no repetido en una matriz de enteros.