HOWTO · Python
Python의 XOR
이 튜토리얼에서는 Python에서 XOR 연산자를 사용해 정수와 부울을 처리하는 방법과 실용적인 활용 사례를 살펴봅니다.
이 페이지의 내용
XOR(배타적 논리합)은 두 값을 비교하여 정확히 하나만 참일 때 참이 되는 연산입니다. Python에서는 캐럿 연산자(^)로 정수와 부울에 XOR을 수행할 수 있습니다. 두 값 중 하나만 허용하고 둘 다는 허용하지 않을 때, 또는 비트를 직접 비교해야 할 때 XOR을 사용합니다.
XOR이란?
XOR은 두 비트를 비교하여 서로 다르면 1, 같으면 0을 반환합니다.
- 0 XOR 0 = 0
- 0 XOR 1 = 1
- 1 XOR 0 = 1
- 1 XOR 1 = 0
부울 값에도 같은 규칙이 적용됩니다. True 값이 정확히 하나이면 결과는 True입니다. 정수에서는 Python이 각 비트 쌍에 이 규칙을 독립적으로 적용합니다. 따라서 부울 XOR과 비트 단위 XOR은 같은 원리를 공유하지만 용도는 서로 다릅니다.
정수와 XOR 사용하기
두 정수의 비트 단위 XOR을 계산하려면 캐럿 연산자(^)를 사용합니다.
a = 5 # Binary: 0101
b = 3 # Binary: 0011
result = a ^ b
print(result)
6
5의 이진 표현은 0101이고 3의 이진 표현은 0011입니다. 각 위치의 비트를 비교하면 다음과 같습니다.
- 0 XOR 0 = 0
- 1 XOR 0 = 1
- 0 XOR 1 = 1
- 1 XOR 1 = 0
결과는 0110, 즉 십진수로 6입니다. 맨 앞의 0은 두 피연산자의 자릿수를 맞추기 위한 것일 뿐이므로 값 자체에는 영향을 주지 않습니다.
부울과 XOR 사용하기
Python은 부울 값에도 ^를 적용합니다. 다음 프로그램은 네 가지 입력 조합을 모두 보여 주고, and, or, not으로 구현한 부울 전용 XOR 함수도 함께 보여 줍니다.
def xor(left, right):
return (left and not right) or (not left and right)
for left, right in ((False, False), (False, True), (True, False), (True, True)):
print(f"{left} ^ {right} -> {left ^ right}; xor() -> {xor(left, right)}")
False ^ False -> False; xor() -> False
False ^ True -> True; xor() -> True
True ^ False -> True; xor() -> True
True ^ True -> False; xor() -> False
부울 표현식에 이름을 붙인 연산이 필요할 때 이 함수를 사용할 수 있습니다. 부울 입력에서는 left ^ right와 xor(left, right)가 네 가지 경우에 같은 결과를 냅니다. 이 논리식은 부울 조건을 위한 것이므로 정수 비트 조작에는 ^를 사용하세요.
XOR의 실제 활용
operator 모듈은 같은 연산을 xor() 함수로 제공합니다. 함수 객체가 필요할 때 편리하게 사용할 수 있으며, 부울 피연산자와 정수 피연산자 모두에 적용됩니다.
from operator import xor
print(xor(True, False))
print(xor(5, 3))
True
6
잘 알려진 또 다른 비트 단위 기법은 임시 변수 없이 두 정수 변수의 값을 교환하는 것입니다.
x = 10
y = 20
x = x ^ y
y = x ^ y
x = x ^ y
print(x, y)
20 10
두 정수에서 시작하면 세 연산은 다음과 같이 작동합니다.
x가x와y의 XOR 결과로 바뀝니다.- 새
x와y를 XOR하여y를 원래x의 값으로 갱신합니다. - 같은 원리를 사용하여
x를 원래y의 값으로 갱신합니다.
이 기법은 정수 변수에 대해 올바르게 작동하지만, 일반적인 Python 코드에서는 튜플 언패킹인 x, y = y, x가 대개 더 읽기 쉽습니다. XOR 방식은 비트 단위 연산을 이해하거나 해당 방식을 명시적으로 요구하는 제약 조건에서 주로 유용합니다.
결론
Python에서 XOR에는 ^를 사용하세요. ^는 부울 값을 직접 비교하고 피연산자가 정수이면 각 비트를 비교합니다. operator.xor() 함수는 같은 연산을 함수 형태로 제공하며, and, or, not으로 부울 규칙을 명시적으로 표현할 수도 있습니다. 논리 연산과 비트 단위 연산 중 어떤 작업을 수행하는지 잘 드러내는 형태를 선택하세요.
FAQ
-
Python에서 XOR은 무엇을 의미하나요?
XOR은 배타적 논리합을 의미하며, 두 입력 중 정확히 하나가 참일 때 참을 반환합니다. 정수 피연산자에서는 이 규칙을 대응하는 각 비트에 적용합니다. -
Python에서 두 정수에 XOR 연산을 어떻게 수행하나요?
캐럿 연산자를 사용하세요.result = a ^ b와 같이 작성하면 됩니다. -
Python에서 부울 값에 XOR을 사용할 수 있나요?
예.True ^ False와False ^ True는True이고, 같은 부울 값을 입력하면False입니다. -
프로그래밍에서 XOR의 실제 활용 사례는 무엇인가요?
세 번의 비트 단위 연산으로 두 정수 변수의 값을 교환할 수 있습니다. 일반적인 Python 코드에서는 튜플 언패킹이 대체로 더 읽기 쉽습니다. -
Python에서 XOR은 교환 법칙을 만족하나요?
예. XOR은 교환 법칙을 만족하므로 호환되는 피연산자에 대해a ^ b는b ^ a와 같습니다.