# Find XOR of two number without using XOR operator

Given two integers, find XOR of them without using the XOR operator, i.e., without using ‘^‘ in C/C++.

Examples :

`Input:  x = 1, y = 2Output: 3Input:  x = 3, y = 5Output: 6`

### Approach:

A Simple Solution is to traverse all bits one by one. For every pair of bits, check if both are the same, set the corresponding bit like 0 in output, otherwise set it as 1.

Below is the code for above approach:

## C++

 `// C++ program to find XOR without using ^``#include ``using` `namespace` `std;` `// Returns XOR of x and 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;``}` `// Driver program to test above function``int` `main()``{``   ``int` `x = 3, y = 5;``   ``cout << ``"XOR is "` `<< myXOR(x, y);``   ``return` `0; ``}`

## C

 `// C program to find XOR without using ^``#include ``#include //to use bool` `// Returns XOR of x and 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;``}` `// Driver Code``int` `main()``{``    ``int` `x = 3, y = 5;``    ``printf``(``"XOR is %d\n"``, myXOR(x, y));``    ``return` `0;``}` `// This code is contributed by phalashi.`

## Java

 `// Java program to find XOR without using ^``import` `java.io.*;` `class` `GFG{``  ` `// Returns XOR of x and y``static` `int` `myXOR(``int` `x, ``int` `y)``{``    ` `    ``// Initialize result``    ``int` `res = ``0``; ` `    ``// Assuming 32-bit Integer ``    ``for``(``int` `i = ``31``; i >= ``0``; i--)                     ``    ``{``        ` `        ``// Find current bits in x and y``        ``int` `b1 = ((x & (``1` `<< i)) == ``0` `) ? ``0` `: ``1``;  ``        ``int` `b2 = ((y & (``1` `<< i)) == ``0` `) ? ``0` `: ``1``;  ` `        ``// If both are 1 then 0 else xor is same as OR``        ``int` `xoredBit = ((b1 & b2) != ``0``) ? ``0` `: (b1 | b2);          ` `        ``// Update result``        ``res <<= ``1``;``        ``res |= xoredBit;``    ``}``    ``return` `res;``}` `// Driver Code``public` `static` `void` `main (String[] args)``{``    ``int` `x = ``3``, y = ``5``;``    ` `    ``System.out.println(``"XOR is "` `+ myXOR(x, y));``}``}` `// This code is contributed by math_lover`

## Python3

 `# Python3 program to find XOR without using ^` `# Returns XOR of x and y``def` `myXOR(x, y):``    ``res ``=` `0` `# Initialize result` `    ``# Assuming 32-bit Integer``    ``for` `i ``in` `range``(``31``, ``-``1``, ``-``1``):``        ` `        ``# Find current bits in x and y``        ``b1 ``=` `x & (``1` `<< i)``        ``b2 ``=` `y & (``1` `<< i)``        ``b1 ``=` `min``(b1, ``1``)``        ``b2 ``=` `min``(b2, ``1``)` `        ``# If both are 1 then 0 ``        ``# else xor is same as OR``        ``xoredBit ``=` `0``        ``if` `(b1 & b2):``            ``xoredBit ``=` `0``        ``else``:``            ``xoredBit ``=` `(b1 | b2)` `        ``# Update result``        ``res <<``=` `1``;``        ``res |``=` `xoredBit``    ``return` `res` `# Driver Code``x ``=` `3``y ``=` `5``print``(``"XOR is"``, myXOR(x, y))` `# This code is contributed by Mohit Kumar`

## C#

 `// C# program to find XOR``// without using ^``using` `System;``class` `GFG{``  ` `// Returns XOR of x and y``static` `int` `myXOR(``int` `x, ``                 ``int` `y)``{    ``  ``// Initialize result``  ``int` `res = 0; ` `  ``// Assuming 32-bit int ``  ``for``(``int` `i = 31; i >= 0; i--)                     ``  ``{``    ``// Find current bits in x and y``    ``int` `b1 = ((x & (1 << i)) == 0 ) ?``               ``0 : 1;  ``    ``int` `b2 = ((y & (1 << i)) == 0 ) ? ``               ``0 : 1;  ` `    ``// If both are 1 then 0 else ``    ``// xor is same as OR``    ``int` `xoredBit = ((b1 & b2) != 0) ?``                     ``0 : (b1 | b2);          ` `    ``// Update result``    ``res <<= 1;``    ``res |= xoredBit;``  ``}``  ``return` `res;``}` `// Driver Code``public` `static` `void` `Main(String[] args)``{``  ``int` `x = 3, y = 5;``  ``Console.WriteLine(``"XOR is "` `+``                     ``myXOR(x, y));``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``

Output
```XOR is 6
```

Time Complexity: O(num), where num is the number of bits in the maximum of the two numbers.
Auxiliary Space: O(1)

Thanks to Utkarsh Trivedi for suggesting this solution.

A Better Solution can find XOR without using a 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 the 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.

Below is the implementation.

## C++

 `// C++ program to find XOR without using ^``#include ``using` `namespace` `std;` `// Returns XOR of x and y``int` `myXOR(``int` `x, ``int` `y)``{``   ``return` `(x | y) & (~x | ~y);``}` `// Driver program to test above function``int` `main()``{``   ``int` `x = 3, y = 5;``   ``cout << ``"XOR is "` `<< myXOR(x, y);``   ``return` `0; ``}`

## Java

 `// Java program to find``// XOR without using ^``import` `java.io.*;` `class` `GFG ``{` `// Returns XOR of x and y``static` `int` `myXOR(``int` `x, ``int` `y)``{``    ``return` `(x | y) & ``           ``(~x | ~y);``}` `// Driver Code``public` `static` `void` `main (String[] args) ``{``    ``int` `x = ``3``, y = ``5``;``    ``System.out.println(``"XOR is "``+ ``                      ``(myXOR(x, y)));``}``}` `// This code is contributed by ajit`

## Python3

 `# Python 3 program to ``# find XOR without using ^` `# Returns XOR of x and y``def` `myXOR(x, y):``    ``return` `((x | y) & ``            ``(~x | ~y))` `# Driver Code``x ``=` `3``y ``=` `5``print``(``"XOR is"` `, ``       ``myXOR(x, y))` `# This code is contributed``# by Smitha`

## C#

 `// C# program to find``// XOR without using ^``using` `System;` `class` `GFG``{``    ` `// Returns XOR of x and y``static` `int` `myXOR(``int` `x, ``int` `y)``{``    ``return` `(x | y) & ``           ``(~x | ~y);``}` `// Driver Code``static` `public` `void` `Main ()``{``    ``int` `x = 3, y = 5;``    ``Console.WriteLine(``"XOR is "``+ ``                     ``(myXOR(x, y)));``}``}` `// This code is contributed by m_kit`

## Javascript

 ``

## PHP

 ``

Output
```XOR is 6
```

Time Complexity: O(1) i.e. simple calculation of arithmetic and bitwise operator.
Auxiliary Space: O(1)

Thanks to jitu_the_best for suggesting this solution.

Alternate Solution :

## C++

 `// C++ program to find XOR without using ^``#include ``using` `namespace` `std;` `// Returns XOR of x and y``int` `myXOR(``int` `x, ``int` `y)``{``   ``return` `(x & (~y)) | ((~x )& y);``}` `// Driver program to test above function``int` `main()``{``   ``int` `x = 3, y = 5;``   ``cout << ``"XOR is "` `<< myXOR(x, y);``   ``return` `0; ``}`

## Java

 `// Java program to find XOR without using ^``import` `java.io.*;`` ` `class` `GFG ``{` `// Returns XOR of x and y``static` `int` `myXOR(``int` `x, ``int` `y)``{``return` `(x & (~y)) | ((~x )& y);``}` `// Driver Code``public` `static` `void` `main (String[] args) ``{`` ` `int` `x = ``3``, y = ``5``;``System.out.println(``"XOR is "``+ ``                      ``(myXOR(x, y)));``} ``}` `// This code is contributed by shivanisinghss2110`

## Python3

 `# Python3 program to ``# Returns XOR of x and y``def` `myXOR(x, y):``    ``return` `(x & (~y)) | ((~x )& y)` `# Driver Code``x ``=` `3``y ``=` `5``print``(``"XOR is"` `, ``    ``myXOR(x, y))` `# This code is contributed by shivanisinghss2110`

## C#

 `// C# program to find XOR without using ^``using` `System;` `class` `GFG{` `// Returns XOR of x and y``static` `int` `myXOR(``int` `x, ``int` `y)``{``    ``return` `(x & (~y)) | ((~x )& y);``}` `// Driver program to test above function``public` `static` `void` `Main()``{``    ``int` `x = 3, y = 5;``    ``Console.WriteLine(``"XOR is "` `+myXOR(x, y));``} ``}` `// This code is contributed by shivansinghss2110`

## Javascript

 ``

Output
```XOR is 6
```

Time Complexity: O(1) i.e. simple calculation of arithmetic and bitwise operator.
Auxiliary Space: O(1)

Another Solution: we can simply use one of the properties of the XOR bitwise operator i.e. a+b = a^b + 2*(a&b), with the help of this we can do the same for an operator variant also.

## C++14

 `// C++ program to find XOR without using ^``#include ``using` `namespace` `std;` `int` `XOR(``int` `x, ``int` `y) { ``return` `(x + y - (2 * (x & y))); }` `int` `main()``{``    ``int` `x = 3, y = 5;``    ``cout << XOR(x, y) << endl;``    ``return` `0;``}``// this code is contributed by vishu05`

## Java

 `// Java program to find XOR without using ^` `class` `GFG {` `    ``static` `int` `XOR(``int` `x, ``int` `y) {``        ``return` `(x + y - (``2` `* (x & y)));``    ``}` `    ``public` `static` `void` `main(String[] args) {``        ``int` `x = ``3``, y = ``5``;``        ``System.out.print(XOR(x, y) + ``"\n"``);``    ``}``}` `// This code is contributed by umadevi9616 `

## Python3

 `# Python3 program to return XOR of x and y without ^ operator``def` `XOR(x, y):``    ``return` `(x``+``y ``-` `(``2``*``(x & y)))`  `# Driver Code``x ``=` `3``y ``=` `5``print``(``"XOR of"``,x,``'&'``,y,``'is:'``,``      ``XOR(x, y))` `# This code is contributed by vishu05`

## C#

 `// C# program to find XOR without using ^``using` `System;` `class` `GFG{` `static` `int` `XOR(``int` `x, ``int` `y) ``{``    ``return``(x + y - (2 * (x & y)));``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``int` `x = 3, y = 5;``  ` `    ``Console.Write(XOR(x, y) + ``"\n"``);``}``}` `// This code is contributed by gauravrajput1`

## Javascript

 ``

Output
```6
```

Time Complexity: O(1) i.e. simple calculation of arithmetic and bitwise operator.
Auxiliary Space: O(1)

Another Solution: We can simply subtract the AND(&) of the two numbers from the OR(|) so that the common bit gets canceled and the opposite bits remain in the answer.

## C++

 `// C++ program to find XOR without using ^``#include ``using` `namespace` `std;` `int` `XOR(``int` `x, ``int` `y) { ``return` `((x|y)-(x&y)); }` `int` `main()``{``    ``int` `x = 3, y = 5;``    ``cout << XOR(x, y) << endl;``    ``return` `0;``}``// this code is contributed by Suvam Chatterjee`

## Java

 `// Java program to find XOR without using ^` `class` `GFG {` `    ``static` `int` `XOR(``int` `x, ``int` `y)``    ``{``        ``return` `((x | y) - (x & y));``    ``}` `    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `x = ``3``, y = ``5``;``        ``System.out.print(XOR(x, y) + ``"\n"``);``    ``}``}` `// This code is contributed by garg28harsh.`

## Python3

 `# Python program to find XOR without using ^``def` `XOR(x, y):``    ``return` `((x | y) ``-` `(x & y))` `x, y ``=` `3``, ``5``print``(XOR(x, y))` `# This code is contributed by lokesh`

## C#

 `using` `System;``class` `GFG {``  ``static` `int` `XOR(``int` `x, ``int` `y)``  ``{``    ``return` `((x | y) - (x & y));``  ``}``  ``public` `static` `void` `Main(String[] args)``  ``{` `    ``int` `x = 3, y = 5;``    ``Console.Write(XOR(x, y));``    ``return``;``  ``}``}` `// This code is contributed by garg28harsh.`

## Javascript

 `// Javascript program to find XOR without using ^``function` `XOR(x, y) ``{ ``return` `((x | y) - (x & y)); }` `let x = 3, y = 5;``console.log(XOR(x, y));` `// This code is contributed by garg28harsh.`

Output
```6
```

Time Complexity: O(1) i.e. simple calculation of arithmetic and bitwise operator.
Auxiliary Space: O(1)

Follow the link to find out the XOR of two numbers online

Previous
Next