Tutorialspoint.dev

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++

// 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; 
}


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++

// 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; 
}

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

Python 3

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

PHP

<?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
?>


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



This article is attributed to GeeksforGeeks.org

leave a comment

code

0 Comments

load comments

Subscribe to Our Newsletter