Compute maximum of two integers in C/C++ using Bitwise Operators
Input: A = 40, B = 54
Input: A = -1, B = -10
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)).
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:
Time Complexity: O(1)
Auxiliary Space: O(1)