Program to find xor of two numbers in python

Given two integers, find XOR of them without using the 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 the same, set the corresponding bit like 0 in output, otherwise set it as 1. 

C++

#include

using namespace std;

int myXOR(int x, int y)

{

    int res = 0;

    for (int i = 31; i >= 0; i--)                    

    {

       bool b1 = x & (1 << i);

       bool b2 = y & (1 << i);

        bool xoredBit = (b1 & b2) ? 0 : (b1 | b2);         

        res <<= 1;

        res |= xoredBit;

    }

    return res;

}

int main()

{

   int x = 3, y = 5;

   cout << "XOR is " << myXOR(x, y);

   return 0;

}

C

#include

#include //to use bool

int myXOR(int x, int y)

{

    int res = 0;

    for (int i = 31; i >= 0; i--)

    {

        bool b1 = x & (1 << i);

        bool b2 = y & (1 << i);

        bool xoredBit = (b1 & b2) ? 0 : (b1 | b2);

        res <<= 1;

        res |= xoredBit;

    }

    return res;

}

int main()

{

    int x = 3, y = 5;

    printf("XOR is %d\n", myXOR(x, y));

    return 0;

}

Java

import java.io.*;

class GFG{

static int myXOR(int x, int y)

{

    int res = 0;

    for(int i = 31; i >= 0; i--)                    

    {

        int b1 = ((x & (1 << i)) == 0 ) ? 0 : 1

        int b2 = ((y & (1 << i)) == 0 ) ? 0 : 1

        int xoredBit = ((b1 & b2) != 0) ? 0 : (b1 | b2);         

        res <<= 1;

        res |= xoredBit;

    }

    return res;

}

public static void main (String[] args)

{

    int x = 3, y = 5;

    System.out.println("XOR is " + myXOR(x, y));

}

}

Python3

def myXOR(x, y):

    res = 0

    for i in range(31, -1, -1):

        b1 = x & (1 << i)

        b2 = y & (1 << i)

        b1 = min(b1, 1)

        b2 = min(b2, 1)

        xoredBit = 0

        if (b1 & b2):

            xoredBit = 0

        else:

            xoredBit = (b1 | b2)

        res <<= 1;

        res |= xoredBit

    return res

x = 3

y = 5

print("XOR is", myXOR(x, y))

C#

using System;

class GFG{

static int myXOR(int x,

                 int y)

{   

  int res = 0;

  for(int i = 31; i >= 0; i--)                    

  {

    int b1 = ((x & (1 << i)) == 0 ) ?

               0 : 1; 

    int b2 = ((y & (1 << i)) == 0 ) ?

               0 : 1; 

    int xoredBit = ((b1 & b2) != 0) ?

                     0 : (b1 | b2);         

    res <<= 1;

    res |= xoredBit;

  }

  return res;

}

public static void Main(String[] args)

{

  int x = 3, y = 5;

  Console.WriteLine("XOR is " +

                     myXOR(x, y));

}

}

Javascript

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

Space Complexity: 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++

#include

using namespace std;

int myXOR(int x, int y)

{

   return (x | y) & (~x | ~y);

}

int main()

{

   int x = 3, y = 5;

   cout << "XOR is " << myXOR(x, y);

   return 0;

}

Java

import java.io.*;

class GFG

{

static int myXOR(int x, int y)

{

    return (x | y) &

           (~x | ~y);

}

public static void main (String[] args)

{

    int x = 3, y = 5;

    System.out.println("XOR is "+

                      (myXOR(x, y)));

}

}

Python3

def myXOR(x, y):

    return ((x | y) &

            (~x | ~y))

x = 3

y = 5

print("XOR is" ,

       myXOR(x, y))

C#

using System;

class GFG

{

static int myXOR(int x, int y)

{

    return (x | y) &

           (~x | ~y);

}

static public void Main ()

{

    int x = 3, y = 5;

    Console.WriteLine("XOR is "+

                     (myXOR(x, y)));

}

}

PHP

function myXOR($x, $y)

{

    return ($x | $y) & (~$x | ~$y);

}

$x = 3;

$y = 5;

echo "XOR is " , myXOR($x, $y);

?>

Javascript

Time Complexity: O(1)

Space Complexity: O(1)

Thanks to jitu_the_best for suggesting this solution. 

Alternate Solution : 

C++

#include

using namespace std;

int myXOR(int x, int y)

{

   return (x & (~y)) | ((~x )& y);

}

int main()

{

   int x = 3, y = 5;

   cout << "XOR is " << myXOR(x, y);

   return 0;

}

Java

import java.io.*;

class GFG

{

static int myXOR(int x, int y)

{

return (x & (~y)) | ((~x )& y);

}

public static void main (String[] args)

{

int x = 3, y = 5;

System.out.println("XOR is "+

                      (myXOR(x, y)));

}

}

Python3

def myXOR(x, y):

    return (x & (~y)) | ((~x )& y)

x = 3

y = 5

print("XOR is" ,

    myXOR(x, y))

C#

using System;

class GFG{

static int myXOR(int x, int y)

{

    return (x & (~y)) | ((~x )& y);

}

public static void Main()

{

    int x = 3, y = 5;

    Console.WriteLine("XOR is " +myXOR(x, y));

}

}

Javascript

Time Complexity: O(1)

Space Complexity: 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

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

}

Java

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");

    }

}

Python3

def XOR(x, y):

    return (x+y - (2*(x & y)))

x = 3

y = 5

print("XOR of",x,'&',y,'is:',

      XOR(x, y))

C#

using System;

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;

    Console.Write(XOR(x, y) + "\n");

}

}

Javascript

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

Auxiliary Space: O(1)

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


How do you find the XOR of two numbers in Python?

Use the XOR operator ^ between two values to perform bitwise "exclusive or" on their binary representations. When used between two integers, the XOR operator returns an integer. When performing XOR on two booleans, True is treated as 1 , and False is treated as 0 . XOR between two booleans returns a boolean.

How do I get XOR 2 numbers?

To find the XOR of two numbers, follow these instructions:.
Convert the numbers into the binary representation..
Compare the corresponding bits of the two numbers..
If only one of the input bits is true (1), the output is true (1). Otherwise, the output is false (0)..

How do you find the XOR of an element in Python?

Suppose we have an integer n and another integer start. We have to create an array called nums where nums[i] = start + 2*i (i start from 0) and n is the size of nums. Then find the bitwise XOR of all elements of nums.