在 C++ 中不使用 XOR 运算符求两个数的 XOR
c++server side programmingprogramming更新于 2025/5/31 12:52:17
在这个问题中,我们给出了整数值 A 和 B。我们的任务是在不使用 XOR 运算符的情况下求两个数的 XOR。
让我们举一个例子来理解这个问题,
输入:A = 4,B = 5 输出:1
解决方法
解决问题的一种方法是将数字转换为各自的二进制数,然后根据此表执行按位运算。
A | B | 输出 |
---|---|---|
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<<"数字的异或为"<<calcXORwoOperator(a, b); return 0; }
输出
数字的异或为 1
替代方法 −
另一种查找异或的方法是逐一比较两个数字中存在的位,并对它们执行相当于异或的运算。
表达式 (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; int b = 5; cout<<"两个数字的异或为 "<<(bitset<8>(calcXORwoOperator(a, b))); return 0; }
输出
两个数字的异或为 00000001