Java 비트 연산자 XOR (Exclusive OR)

JavaBeginner
지금 연습하기

소개

XOR 연산자는 Java 에서 피연산자의 개별 비트를 비교하는 데 사용되는 비트 연산자입니다. Java 에서 XOR 연산자는 캐럿 기호 (^) 로 표시됩니다. 두 비트를 비교하여 비교되는 두 비트가 같지 않은 경우에만 true 를 반환합니다.

기본 데이터 타입과 XOR 사용하기

Java 에서 XOR 연산자는 모든 기본 데이터 유형과 함께 사용할 수 있습니다. 기본 데이터 유형을 사용하여 XOR 의 진리표를 확인해 보겠습니다.

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

코드를 실행하려면, ~/project/XOR.java 파일에 저장하고 터미널에서 다음 명령을 실행하십시오.

cd ~/project/
javac XOR.java
java XOR

부울 값과 XOR 사용하기

XOR 는 부울 값과 함께 사용할 수도 있습니다. 부울 true 와 false 를 사용하여 표를 다시 만들어 보겠습니다.

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

코드를 실행하려면, ~/project/XOR.java 파일에 저장하고 터미널에서 다음 명령을 실행하십시오.

cd ~/project/
javac XOR.java
java XOR

정수 값과 XOR 사용법

XOR 연산자는 0 또는 1 이 아닌 정수에도 사용할 수 있습니다. XOR 연산자는 정수의 이진 표현의 개별 비트에 대해 작동합니다.

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

코드를 실행하려면, ~/project/XOR.java 파일에 저장하고 터미널에서 다음 명령을 실행하십시오.

cd ~/project/
javac XOR.java
java XOR

XOR 연산을 이용한 중복되지 않는 정수 찾기

XOR 연산자는 정수 배열에서 반복되지 않는 정수를 찾는 데에도 사용할 수 있습니다.

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("The non-repeating integer is: " + nonRepeatingNum);
    }
}

코드를 실행하려면, ~/project/XOR.java 파일에 저장하고 터미널에서 다음 명령을 실행하십시오.

cd ~/project/
javac XOR.java
java XOR

출력 결과는 다음과 같습니다.

The non-repeating integer is: 5

이진 문자열의 XOR 연산 수행 방법

XOR 는 기본 데이터 타입에 대해서만 작동합니다. 하지만, XOR 연산자와 몇 가지 추가 로직을 사용하여 두 개의 이진 문자열의 XOR 을 찾는 자체 메서드를 작성할 수 있습니다.

public class XOR {
    public static String binaryStringXOR(String binStr1, String binStr2) {
        String xor = "";
        // adding zeroes to make the two strings equal in length
        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"));
    }
}

코드를 실행하려면, ~/project/XOR.java 파일에 저장하고 터미널에서 다음 명령을 실행하십시오.

cd ~/project/
javac XOR.java
java XOR

출력 결과는 다음과 같습니다.

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

요약

이 랩에서는 Java 에서 XOR 연산의 기본적인 개념에 대해 배웠습니다. XOR 연산자가 boolean 및 integer 데이터 타입에 어떻게 사용될 수 있는지 시연했습니다. 또한 두 개의 이진 문자열의 XOR 을 찾는 메서드와 정수 배열에서 반복되지 않는 정수를 찾는 메서드를 구현했습니다.