Find XOR of two number without using XOR operator - GeeksforGeeks
Given two integers, find XOR of them without using XOR operator, i.e., without using ^ in C/C++.
(~x & y) | (x & ~y). The logic can be derived using karnaugh's map.
A Simple Solution is to traverse all bits one by one. For every pair of bits, check if both are same, set the corresponding bit as 0 in output, otherwise set as 1.
Read full article from Find XOR of two number without using XOR operator - GeeksforGeeks
Given two integers, find XOR of them without using XOR operator, i.e., without using ^ in C/C++.
(~x & y) | (x & ~y). The logic can be derived using karnaugh's map.
A Better Solution can find XOR without using loop.
1) Find bitwise OR of x and y (Result has set bits where either x has set or y has set bit). OR of x = 3 (011) and y = 5 (101) is 7 (111)
2) To remove extra set bits find places where both x and y have set bits. The value of expression “~x | ~y” has 0 bits wherever x and y both have set bits.
3) bitwise AND of “(x | y)” and “~x | ~y” produces the required result.
int
myXOR(
int
x,
int
y)
{
return
(x | y) & (~x | ~y);
}
int
myXOR(
int
x,
int
y)
{
int
res = 0;
// Initialize result
// Assuming 32-bit Integer
for
(
int
i = 31; i >= 0; i--)
{
// Find current bits in x and y
bool
b1 = x & (1 << i);
bool
b2 = y & (1 << i);
// If both are 1 then 0 else xor is same as OR
bool
xoredBit = (b1 & b2) ? 0 : (b1 | b2);
// Update result
res <<= 1;
res |= xoredBit;
}
return
res;
}