Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tìm XOR của hai số không dùng toán tử XOR trong C++


Trong bài toán này, chúng ta được cho hai giá trị nguyên A và B. Nhiệm vụ là tìm XOR của hai số mà không sử dụng toán tử XOR.

Ví dụ minh họa

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

Phương pháp giải

Một phương pháp để giải quyết bài toán là chuyển đổi các số sang dạng nhị phân và thực hiện các phép toán bitwise dựa trên bảng chân lý XOR.

ABKết quả
000
011
101
110

Chúng ta sẽ sử dụng các phép toán bitwise để thực hiện điều này.

Ví dụ 1: Duyệt qua từng bit

Chương trình minh họa phương pháp duyệt từng bit:

#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 của hai số là " << calcXORwoOperator(a, b);
    return 0;
}

Kết quả

XOR của hai số là 1

Phương pháp thay thế

Một phương pháp khác để tìm XOR là so sánh các bit của hai số và thực hiện các phép toán tương đương XOR.

Biểu thức (a | b) - (a & b) tương đương với a ^ b. Chúng ta sẽ thực hiện phép toán này để tìm XOR của hai số a và b.

Ví dụ 2: Sử dụng công thức toán học

#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 << "XOR của hai số là " << (bitset<8>(calcXORwoOperator(a, b)));
    return 0;
}

Kết quả

XOR của hai số là 00000001