Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 XOR 연산자를 사용하지 않고 두 숫자의 XOR 찾기

<시간/>

이 문제에서는 정수 값 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