이 문제에서는 정수 값 A &B가 제공됩니다. 우리의 임무는 XOR 연산자를 사용하지 않고 두 숫자의 XOR을 찾는 것입니다. .
문제를 이해하기 위해 예를 들어 보겠습니다.
Input : A = 4, B = 5 Output : 1
솔루션 접근 방식
문제를 해결하는 한 가지 방법은 숫자를 각각의 이진수로 변환한 다음 이 테이블을 기반으로 비트 연산을 수행하는 것입니다.
A | 나 | 출력 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
결과가 반환됩니다. 이를 위해 비트 연산을 사용합니다.
예시
솔루션 작동을 설명하는 프로그램
#include <iostream> using namespace std; int calcXORwoOperator(int a, int b){ int xorVal = 0; for (int i = 31; i >= 0; i--){ bool val1 = a & (1 << i); bool val2 = b & (1 << i); bool xorBit = (val1 & val2) ? 0 : (val1 | val2); xorVal <<= 1; xorVal |= xorBit; } return xorVal; } int main(){ int a = 4, b = 5; cout<<"XOR of the numbers is "<<calcXORwoOperator(a, b); return 0; }
출력
XOR of the numbers is 1
대체 방법 -
xor를 찾는 또 다른 방법은 두 숫자에 있는 비트를 하나씩 비교하고 XOR에 해당하는 작업을 수행하는 것입니다.
(a | b) - (a &b) 표현식은 a^b와 동일합니다. 따라서 이 작업을 수행합니다. 따라서 두 숫자 &b의 XOR을 구합니다.
예시
솔루션 작동을 설명하는 프로그램
#include <iostream> #include <bitset> using namespace std; int calcXORwoOperator(int a, int b) { return (a | b) - (a & b); } int main(){ int a = 4; int b = 5; cout<<"The XOR of both numbers is "<<(bitset<8>(calcXORwoOperator(a, b))); return 0; }
출력
The XOR of both numbers is 00000001