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

**Examples:**

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

Input:A = -1, B = -10Output:-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; ` `} ` |

*chevron_right*

*filter_none*

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

*chevron_right*

*filter_none*

**Output:**

54

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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.