Given two integers A and B, the task is to find the maximum of two numbers using Bitwise Operators.
Examples:
Input: A = 40, B = 54
Output: 54Input: A = -1, B = -10
Output: -1
Approach: The idea is to use the Bitwise Operator as well as the Right Shift Operator to find the greatest number between two distinct numbers without using any conditional statements( if … ) and Ternary Operator(?: ). Below are the steps:
- Find the maximum value on the basis of the below expression:
z = A – B
i = (z >> 31) & 1
max = a – (i*z)
- Subtract two numbers and store it in another variable z.
- To get the sign of the number obtained after subtraction, apply Right Shift to the variable z and store it in another variable i and then perform Bitwise AND operation on the variable i with 1 to get values in 1 or 0.
- Perform the following expression to get the largest value among the two given numbers as max = (a – (i * z)).
Illustration:
A = 40, B = 54
z = (A – B) = 40 – 54 = -14
i = -1 & 1 = 1
max = a – (i * z) = (40 – (1 * -14)) = 54
Below is the implementation of the above approach:
// C++ program for above approach #include <iostream> using namespace std;
// Function to find the largest number int findMax( int a, int b)
{ int z, i, max;
// Perform the subtraction
z = a - b;
// Right shift and Bitwise AND
i = (z >> 31) & 1;
// Find the maximum number
max = a - (i * z);
// Return the maximum value
return max;
} // Driver Code int main()
{ int A = 40, B = 54;
// Function Call
cout << findMax(A, B);
return 0;
} |
// C program for the above approach #include <stdio.h> // Function to find the largest number int findMax( int a, int b)
{ int z, i, max;
// Perform the subtraction
z = a - b;
// Right shift and Bitwise AND
i = (z >> 31) & 1;
// Find the maximum number
max = a - (i * z);
// Return the maximum value
return max;
} // Driver Code int main()
{ int A = 40, B = 54;
// Function Call
printf ( "%d" , findMax(A, B));
return 0;
} |
// Java program for above approach import java.io.*;
class GFG {
// Function to find the largest number
public static int findMax( int a, int b)
{
int z, i, max;
// Perform the subtraction
z = a - b;
// Right shift and Bitwise AND
i = (z >> 31 ) & 1 ;
// Find the maximum number
max = a - (i * z);
// Return the maximum value
return max;
}
// Driver Code
public static void main (String[] args)
{
int A = 40 , B = 54 ;
// Function Call
System.out.println(findMax(A, B));
}
} // This code is contributed by Shubham Singh |
# Python program for the above approach # Function to find the largest number def findmaxx(a, b):
# Perform the subtraction
z = a - b
# Right shift and Bitwise AND
i = (z >> 31 ) & 1
# Find the maxximum number
maxx = a - (i * z)
# Return the maxximum value
return maxx
# Driver Code A = 40
B = 54
# Function Call print (findmaxx(A, B))
# This code is contributed by Shubham Singh |
<script> // Javascript program for above approach // Function to find the largest number function findMax(a, b)
{ var z, i, max;
// Perform the subtraction
z = a - b;
// Right shift and Bitwise AND
i = (z >> 31) & 1;
// Find the maximum number
max = a - (i * z);
// Return the maximum value
return max;
} // Driver Code var A = 40, B = 54;
// Function Call document.write(findMax(A, B)); // This code is ocntributed by shubham singh </script> |
54
Time Complexity: O(1)
Auxiliary Space: O(1)