# Position of rightmost different bit

• Difficulty Level : Easy
• Last Updated : 01 Jun, 2022

Given two numbers m and n. Find the position of the rightmost different bit in the binary representation of numbers. It is guaranteed that such a bit exists.

Examples:

Input: m = 11, n = 9
Output: 2
(11)10 = (1011)2
(9)10 = (1001)2
It can be seen that 2nd bit from
the right is different

Input: m = 52, n = 4
Output: 5
(52)10 = (110100)2
(4)10 = (100)2, can also be written as
= (000100)2
It can be seen that 5th bit from
the right is different
Recommended Practice

Approach: Get the bitwise xor of m and n. Let it be xor_value = m ^ n. Now, find the position of rightmost set bit in xor_value.

Explanation: The bitwise xor operation produces a number that has set bits only at the positions where the bits of m and n differ. Thus, the position of the rightmost set bit in xor_value gives the position of the rightmost different bit.

Efficient way to find the rightmost set bit:
log2(n & -n) + 1 gives us the position of the rightmost set bit.
(-n) reverses all the bits from left to right till the last set bit
for example:
n = 16810
binary signed 2's complement of n  = 00000000101010002
binary signed 2's complement of -n = 11111111010110002
âˆ´ (n & -n) = 00000000000010002 = 8
now, log2(n & -n) = log2(8) = 3
log2(n & -n) + 1 = 4 (position of rightmost set bit)

Below is the implementation of the above approach:

## C++

 // C++ implementation to find the position// of rightmost different bit#include using namespace std; // Function to find the position of// rightmost set bit in 'n'// returns 0 if there is no set bit.int getRightMostSetBit(int n){    // to handle edge case when n = 0.     if (n == 0)         return 0;         return log2(n & -n) + 1;} // Function to find the position of// rightmost different bit in the// binary representations of 'm' and 'n'// returns 0 if there is no// rightmost different bit.int posOfRightMostDiffBit(int m, int n){    // position of rightmost different    //  bit         return getRightMostSetBit(m ^ n);} // Driver programint main(){    int m = 52, n = 24;       cout << "Position of rightmost different bit:"         << posOfRightMostDiffBit(m, n)<

## Java

 // Java implementation to find the position// of rightmost different bit class GFG {         // Function to find the position of    // rightmost set bit in 'n'    // return 0 if there is no set bit.    static int getRightMostSetBit(int n)    {        if(n == 0)          return 0;               return (int)((Math.log10(n & -n)) /                     Math.log10(2)) + 1;    }         // Function to find the position of    // rightmost different bit in the    // binary representations of 'm' and 'n'    static int posOfRightMostDiffBit(int m, int n)    {        // position of rightmost different bit        return getRightMostSetBit(m ^ n);    }         // Driver code    public static void main(String arg[])    {        int m = 52, n = 4;        System.out.print("Position = " +            posOfRightMostDiffBit(m, n));    }} // This code is contributed by Anant Agarwal.

## Python3

 # Python implementation# to find the position# of rightmost different bit import math # Function to find the position of# rightmost set bit in 'n'def getRightMostSetBit(n):    if (n == 0):        return 0     return math.log2(n & -n) + 1  # Function to find the position of# rightmost different bit in the# binary representations of 'm' and 'n'def posOfRightMostDiffBit(m, n):     # position of rightmost different    # bit    return getRightMostSetBit(m ^ n) # Driver code m = 52n = 4print("position = ", int(posOfRightMostDiffBit(m, n))) # This code is contributed# by Anant Agarwal.

## C#

 // C# implementation to find the position// of rightmost different bitusing System; class GFG {         // Function to find the position of    // rightmost set bit in 'n'    static int getRightMostSetBit(int n)    {        if (n == 0)            return 0;        return (int)((Math.Log10(n & -n))                       / Math.Log10(2)) + 1;    }         // Function to find the position of    // rightmost different bit in the    // binary representations of 'm' and 'n'    static int posOfRightMostDiffBit(int m, int n)    {        // position of rightmost different bit        return getRightMostSetBit(m ^ n);    }         // Driver code    public static void Main()    {        int m = 52, n = 4;        Console.Write("Position = " +            posOfRightMostDiffBit(m, n));    }} // This code is contributed by Smitha.



## Javascript



Output

Position of rightmost different bit:3

Time Complexity: O(log2n)

Space Complexity: O(1)

Using ffs() function

## C++

 // C++ implementation to find the// position of rightmost different// bit in two number.#include using namespace std;  // function to find rightmost different//  bit in two numbers.int posOfRightMostDiffBit(int m, int n){    return ffs(m ^ n);}  // Driver codeint main(){    int m = 52, n = 4;    cout <<"Position = " <<         posOfRightMostDiffBit(m, n);    return 0;}

## Java

 // Java implementation to find the// position of rightmost different// bit in two number.import java.util.*;class GFG{  // function to find rightmost// different bit in two numbers.static int posOfRightMostDiffBit(int m,                                 int n){  return (int)Math.floor(              Math.log10(              Math.pow(m ^ n,                       2)))+2;}  // Driver codepublic static void main(String[] args){  int m = 52, n = 4;  System.out.println("Position = " +                      posOfRightMostDiffBit(m, n));}} // This code is contributed by gauravrajput1

## Python3

 # Python3 implementation to find the# position of rightmost different# bit in two number.from math import floor, log10 # Function to find rightmost different# bit in two numbers.def posOfRightMostDiffBit(m, n):         return floor(log10(pow(m ^ n, 2))) + 2 # Driver codeif __name__ == '__main__':         m, n = 52, 4         print("Position = ",    posOfRightMostDiffBit(m, n)) # This code is contributed by mohit kumar 29

## C#

 // C# implementation to find the// position of rightmost different// bit in two number.using System;class GFG{   // function to find rightmost  // different bit in two numbers.  static int posOfRightMostDiffBit(int m,                                   int n)  {    return (int)Math.Floor(Math.Log10(      Math.Pow(m ^ n, 2))) + 2;  }   // Driver code  public static void Main(String[] args)  {    int m = 52, n = 4;    Console.Write("Position = " +                  posOfRightMostDiffBit(m, n));  }} // This code is contributed by shivanisinghss2110



## Javascript



Output

Position = 5

Time Complexity: O(log2n)

Space Complexity: O(1)

This article is contributed by Ayush Jauhari. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.