Find XOR of two number without using XOR operator

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

Examples :

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 same, set the corresponding bit as 0 in output, otherwise set as 1.



C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find XOR without using ^
#include <iostream>
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; 
}

chevron_right



Output :

XOR is 6

Thanks to Utkarsh Trivedi for suggesting this solution.

 

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.

Below is implementation.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find XOR without using ^
#include <iostream>
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; 
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 contibuted by ajit

chevron_right


Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 contibuted by m_kit

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find 
// XOR without using ^
  
// Returns XOR of x and y
function myXOR($x, $y)
{
    return ($x | $y) & (~$x | ~$y);
}
  
// Driver Code
$x = 3;
$y = 5;
  
echo "XOR is " , myXOR($x, $y);
  
// This code is contibuted by aj_36
?>

chevron_right



Output :

XOR is 6

Thanks to jitu_the_best for suggesting this solution.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above



My Personal Notes arrow_drop_up



Article Tags :
Practice Tags :


5


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.