이 튜토리얼에서는 주어진 숫자와 XOR 연산을 수행했을 때 결과가 최대가 되는 숫자를 찾는 프로그램을 작성해 보겠습니다.
XOR 연산의 기본 원리
이 문제에서는 비트 수를 8비트로 가정합니다.
XOR(배타적 논리합) 연산은 다음과 같은 특징을 가집니다.
- 서로 다른 비트끼리 XOR 연산을 하면 결과가 1이 됩니다.
- 같은 비트끼리 XOR 연산을 하면 결과가 0이 됩니다.
따라서 주어진 숫자의 모든 비트를 뒤집으면, 즉 1의 보수(1's complement)를 구하면 그 값이 바로 우리가 찾고자 하는 숫자입니다. 모든 비트가 서로 달라지기 때문에 XOR 결과의 모든 비트가 1이 되어 최대값을 얻을 수 있습니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
int findNumberWithMaximumXOR(int X) {
return ((1 << 8) - 1) ^ X;
}
int main() {
int X = 4;
cout << findNumberWithMaximumXOR(X) << endl;
return 0;
}코드 설명
(1 << 8) - 1은 1을 왼쪽으로 8비트 이동한 값(256)에서 1을 빼서 255(0xFF), 즉 8비트 모두가 1인 값을 만듭니다. 이 값과 입력 숫자 X를 XOR 연산하면 X의 모든 비트가 반전되어 최대 XOR 결과를 얻을 수 있습니다.
실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻습니다.
251
입력값 4는 2진수로 00000100이며, 모든 비트를 반전하면 11111011, 즉 251이 됩니다. 4와 251을 XOR하면 255로 모든 비트가 1이 되는 것을 확인할 수 있습니다.
결론
이처럼 1의 보수를 활용하면 복잡한 반복문 없이 단 한 줄의 연산으로 최대 XOR 값을 구할 수 있습니다. 튜토리얼에 대해 궁금한 점이 있다면 댓글로 남겨주세요.