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

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

ในปัญหานี้ เราได้รับค่าจำนวนเต็ม A และ B งานของเราคือการหา XOR ของสองตัวเลขโดยไม่ใช้ตัวดำเนินการ XOR

ตัวอย่างเพื่อเข้าใจปัญหา

Input: A = 4, B = 5 Output: 1

วิธีการแก้ปัญหา

วิธีหนึ่งคือการแปลงตัวเลขเป็นเลขฐานสอง จากนั้นดำเนินการบิตตามตารางความจริงของ XOR

ABOutput
000
011
101
110

วิธีที่ 1: ใช้ลูปตรวจสอบบิตแต่ละตำแหน่ง

#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;
}

วิธีที่ 2: ใช้สูตรทางคณิตศาสตร์ (a | b) - (a & b)

นิพจน์ (a | b) - (a & b) เทียบเท่ากับ 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, b = 5;
    cout << "The XOR of both numbers is " << bitset<8>(calcXORwoOperator(a, b));
    return 0;
}

ผลลัพธ์

XOR of the numbers is 1
The XOR of both numbers is 00000001