Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java) XOR(^) 연산자 완벽 정리 – 개념부터 실전 예제까지

비트 단위 XOR(배타적 논리합, Exclusive OR)은 자바에서 "^" 기호로 표현되는 연산자입니다. 두 피연산자의 비트가 서로 다를 때는 1을, 두 비트가 같을 때는 0을 반환합니다. XOR는 두 개의 피연산자를 취하는 이항 연산자이며, 표현식을 왼쪽에서 오른쪽으로 평가합니다. 한 가지 유의할 점은 "^" 연산자는 String 타입의 피연산자에는 정의되어 있지 않아 직접 사용할 수 없다는 것입니다.

XOR 연산 규칙(진리표)

  • false XOR false → false
  • false XOR true → true
  • true XOR false → true
  • true XOR true → false

즉, XOR는 "두 값이 서로 다른가?"를 판별하는 연산이라고 이해하면 쉽습니다. boolean 타입에서는 비교 연산자 !=(같지 않음)와 항상 동일한 결과를 반환합니다.

예제 1: boolean 변수에 XOR 적용하기

public class XORTest1 {
    public static void main(String[] args) {
        boolean x = false;
        boolean y = false;
        boolean xXorY = x ^ y;
        System.out.println("false XOR false: "+xXorY);
        x = false;
        y = true;
        xXorY = x ^ y;
        System.out.println("false XOR true: "+xXorY);
        x = true;
        y = false;
        xXorY = x ^ y;
        System.out.println("true XOR false: "+xXorY);
        x = true;
        y = true;
        xXorY = x ^ y;
        System.out.println("true XOR true: "+xXorY);
    }
}

실행 결과

false XOR false: false
false XOR true: true
true XOR false: true
true XOR true: false

실행 결과에서 볼 수 있듯이, 두 boolean 값이 서로 다를 경우에만 true가 출력됩니다.

예제 2: 문자열의 각 문자에 XOR 적용하기

String 타입 자체에는 "^" 연산자를 직접 사용할 수 없지만, charAt() 메서드로 꺼낸 char 값에는 적용할 수 있습니다. char는 내부적으로 정수(유니코드) 값으로 처리되기 때문에('0'은 48, '1'은 49), 두 문자의 코드 값이 같으면 0, 다르면 1이 됩니다. 이러한 성질을 활용하면 아래와 같이 2진 문자열 형태의 데이터에도 XOR 연산을 응용할 수 있습니다.

public class XORTest2 {
    public static void main(String[] args) {
        String str1 = "1010100101";
        String str2 = "1110000101";
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < str1.length(); i++) {
            sb.append(str1.charAt(i)^str2.charAt(i));
        }
        System.out.println(sb);
    }
}

실행 결과

0100100000

두 문자열의 같은 위치에 있는 문자들을 하나씩 비교하여 서로 다르면 1, 같으면 0을 이어 붙인 값이 최종적으로 출력됩니다.