# Calculate Bitwise OR of two integers from their given Bitwise AND and Bitwise XOR values

Given two integers X and Y, representing Bitwise XOR and Bitwise AND of two positive integers, the task is to calculate the Bitwise OR value of those two positive integers.

Examples:

Input: X = 5, Y = 2
Output:
Explanation:
If A and B are two positive integers such that A ^ B = 5, A & B = 2, then the possible value of A and B is 3 and 6 respectively.
Therefore, (A | B) = (3 | 6) = 7.

Input: X = 14, Y = 1
Output: 15
Explanation:
If A and B are two positive integers such that A ^ B = 14, A & B = 1, then the possible value of A and B is 7 and 9 respectively.
Therefore, (A | B) = (7 | 9) = 15.

Naive Approach: The simplest approach to solve this problem is to iterate up to the maximum of X and Y, say N, and generate all possible pairs of the first N natural numbers. For each pair, check if Bitwise XOR and the Bitwise AND of the pair is X and Y, respectively, or not. If found to be true, then print the Bitwise OR of that pair.

Below is the implementation of the above approach:

## C++

 `// C++ program to implement the above approach` `#include ``using` `namespace` `std;` `// Function to calculate Bitwise OR from given``// bitwise XOR and bitwise AND values``int` `findBitwiseORGivenXORAND(``int` `X, ``int` `Y)``{``    ``int` `range = X + Y;``    ``// Find the max range``    ``int` `ans = 0;``    ``// Traversing all the number from 0 to rangr``    ``for` `(``int` `i = 1; i <= range; i++) {``        ``for` `(``int` `j = 1; j <= range; j++) {``            ``// If X and Y satisfie``            ``if` `((i ^ j) == X && (i & j) == Y) {``                ``ans = (i | j);``                ``// Calculate the OR``                ``break``;``            ``}``        ``}``    ``}``    ``return` `ans;``}` `// Driver Code``int` `main()``{``    ``int` `X = 5, Y = 2;``    ``cout << findBitwiseORGivenXORAND(X, Y);``}`

## Java

 `// Java program to implement the above approach``import` `java.util.*;` `public` `class` `GFG {` `    ``// Function to calculate Bitwise OR from given``    ``// bitwise XOR and bitwise AND values``    ``static` `int` `findBitwiseORGivenXORAND(``int` `X, ``int` `Y)``    ``{``        ``int` `range = X + Y;``        ``// Find the max range``        ``int` `ans = ``0``;``        ``// Traversing all the numbers from 0 to range``        ``for` `(``int` `i = ``1``; i <= range; i++) {``            ``for` `(``int` `j = ``1``; j <= range; j++) {``                ``// If X and Y satisfy the conditions``                ``if` `((i ^ j) == X && (i & j) == Y) {``                    ``ans = (i | j);``                    ``// Calculate the OR``                    ``break``;``                ``}``            ``}``        ``}``        ``return` `ans;``    ``}` `    ``// Driver Code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `X = ``5``, Y = ``2``;``        ``System.out.println(findBitwiseORGivenXORAND(X, Y));``    ``}``}` `// This code is contributed by Susobhan Akhuli`

## Python3

 `# Python program to implement the above approach``# Function to calculate Bitwise OR from given``# bitwise XOR and bitwise AND values``def` `findBitwiseORGivenXORAND(X, Y):``    ``range_val ``=` `X ``+` `Y``    ``# Find the max range``    ``ans ``=` `0``    ``# Traversing all the numbers from 0 to range_val``    ``for` `i ``in` `range``(``1``, range_val ``+` `1``):``        ``for` `j ``in` `range``(``1``, range_val ``+` `1``):``            ``# If X and Y satisfy the conditions``            ``if` `(i ^ j) ``=``=` `X ``and` `(i & j) ``=``=` `Y:``                ``ans ``=` `(i | j)``                ``# Calculate the OR``                ``break``    ``return` `ans` `# Driver Code``def` `main():``    ``X ``=` `5``    ``Y ``=` `2``    ``print``(findBitwiseORGivenXORAND(X, Y))` `if` `__name__ ``=``=` `"__main__"``:``    ``main()` `# This code is contributed by Susobhan Akhuli`

## C#

 `// C# program to implement the above approach``using` `System;` `public` `class` `GFG {``    ``// Function to calculate Bitwise OR from given``    ``// bitwise XOR and bitwise AND values``    ``static` `int` `FindBitwiseORGivenXORAND(``int` `X, ``int` `Y)``    ``{``        ``int` `range = X + Y;``        ``int` `ans = 0;` `        ``// Traversing all the numbers from 0 to range``        ``for` `(``int` `i = 1; i <= range; i++) {``            ``for` `(``int` `j = 1; j <= range; j++) {``                ``// If X and Y satisfy the conditions``                ``if` `((i ^ j) == X && (i & j) == Y) {``                    ``ans = (i | j); ``// Calculate the OR``                    ``break``;``                ``}``            ``}``        ``}``        ``return` `ans;``    ``}` `    ``static` `void` `Main()``    ``{``        ``int` `X = 5, Y = 2;``        ``Console.WriteLine(FindBitwiseORGivenXORAND(X, Y));``    ``}``}` `// This code is contributed by Susobhan Akhuli`

## Javascript

 `// Javascript program to implement the above approach` `// Function to calculate Bitwise OR from given``// bitwise XOR and bitwise AND values``function` `findBitwiseORGivenXORAND(X, Y) {``    ``let range = X + Y;``    ``// Find the max range``    ``let ans = 0;``    ``// Traversing all the number from 0 to range``    ``for` `(let i = 1; i <= range; i++) {``        ``for` `(let j = 1; j <= range; j++) {``            ``// If X and Y satisfy``            ``if` `((i ^ j) === X && (i & j) === Y) {``                ``ans = (i | j);``                ``// Calculate the OR``                ``break``;``            ``}``        ``}``    ``}``    ``return` `ans;``}` `// Driver Code``let X = 5, Y = 2;``console.log(findBitwiseORGivenXORAND(X, Y));`

Output
```7

```

Time Complexity: O(N2), where N = (X+Y)
Auxiliary Space: O(1)

Efficient Approach: To optimize the above approach, the idea is based on the following observations:

(A ^ B) = (A | B) – (A & B)
=> (A | B) = (A ^ B) + (A & B) = X + Y

Below is the implementation of the above approach:

## C++

 `// C++ program to implement``// the above approach` `#include ``using` `namespace` `std;` `// Function to calculate Bitwise OR from given``// bitwise XOR and bitwise AND values``int` `findBitwiseORGivenXORAND(``int` `X, ``int` `Y) { ``return` `X + Y; }` `// Driver Code``int` `main()``{``    ``int` `X = 5, Y = 2;``    ``cout << findBitwiseORGivenXORAND(X, Y);``}`

## C

 `// C program to implement``// the above approach``#include ` `// Function to calculate Bitwise OR from given``// bitwise XOR and bitwise AND values``int` `findBitwiseORGivenXORAND(``int` `X, ``int` `Y) ``{ ``  ``return` `X | Y; ``}` `// Driver Code``int` `main()``{``    ``int` `X = 5, Y = 2;``    ``printf``(``"%d\n"``, findBitwiseORGivenXORAND(X, Y));``}` `// This code is contributed by phalashi.`

## Java

 `// Java program to implement``// the above approach``class` `GFG {` `    ``// Function to calculate Bitwise OR from given``    ``// bitwise XOR and bitwise AND values``    ``static` `int` `findBitwiseORGivenXORAND(``int` `X, ``int` `Y)``    ``{``        ``return` `X + Y;``    ``}` `    ``// Driver Code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `X = ``5``, Y = ``2``;``        ``System.out.print(findBitwiseORGivenXORAND(X, Y));``    ``}``}` `// This code is contributed by AnkitRai01`

## Python3

 `# Python3 program to implement``# the above approach` `# Function to calculate Bitwise OR from``# given bitwise XOR and bitwise AND values`  `def` `findBitwiseORGivenXORAND(X, Y):` `    ``return` `X ``+` `Y`  `# Driver Code``if` `__name__ ``=``=` `"__main__"``:` `    ``X ``=` `5``    ``Y ``=` `2` `    ``print``(findBitwiseORGivenXORAND(X, Y))` `# This code is contributed by AnkitRai01`

## C#

 `// C# program to implement``// the above approach``using` `System;` `class` `GFG {` `    ``// Function to calculate Bitwise OR from given``    ``// bitwise XOR and bitwise AND values``    ``static` `int` `findBitwiseORGivenXORAND(``int` `X, ``int` `Y)``    ``{``        ``return` `X + Y;``    ``}` `    ``// Driver Code``    ``public` `static` `void` `Main(``string``[] args)``    ``{``        ``int` `X = 5, Y = 2;` `        ``Console.Write(findBitwiseORGivenXORAND(X, Y));``    ``}``}` `// This code is contributed by ipg2016107`

## Javascript

 ``

Output
```7

```

Time Complexity: O(1)
Auxiliary Space: O(1)

Previous
Next