Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหา XOR ของตัวเลขสองตัวโดยไม่ต้องใช้ตัวดำเนินการ XOR ใน C++


ในปัญหานี้ เราได้รับค่าจำนวนเต็ม 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 ดังนั้นเราจะดำเนินการนี้ ดังนั้นการหา XOR ของตัวเลขสองตัว a &b.

ตัวอย่าง

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

#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