# Find XOR of two number without using XOR operator

• Difficulty Level : Easy
• Last Updated : 16 Nov, 2021

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

Examples :

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

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

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

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 as 1.

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

## 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`

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`

## PHP

 ``

## Javascript

 ``
Output
`XOR is 6`

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`

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.