Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Compute maximum of two integers in C/C++ using Bitwise Operators

  • Difficulty Level : Medium
  • Last Updated : 05 Nov, 2020

Given two integers A and B, the task is to find the maximum of two numbers using Bitwise Operators.

Examples:

We provide nothing but the best curated videos and practice problems for our students. Check out the C Foundation Course and master the C language from basic to advanced level. Wait no more, start learning today!

Input: A = 40, B = 54
Output: 54

Input: 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




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

C++




// 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;
}
Output:
54

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




My Personal Notes arrow_drop_up
Recommended Articles
Page :