# Position of rightmost different bit

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
Explanation:
(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
Explanation:
(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

## Position of rightmost different bit using XOR:

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. As 0 XOR 1 and 1 XOR 0 equals 1, so if a bit is set in the XOR value then it means that the bits at that position were different in the given numbers

An 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 code` `int` `main()` `{` `    ``int` `m = 52, n = 24;`   `    ``// Function call` `    ``cout << ``"Position of rightmost different bit:"` `         ``<< posOfRightMostDiffBit(m, n) << endl;` `    ``return` `0;` `}`

## 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``;`   `        ``// Function call` `        ``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` `if` `__name__ ``=``=` `"__main__"``:` `    ``m ``=` `52` `    ``n ``=` `4`   `    ``# Function call` `    ``print``(``"position = "``, ``int``(posOfRightMostDiffBit(m, n)))`   `# This code is contributed` `# by Anant Agarwal.`

## C#

 `// C# implementation to find the position` `// of rightmost different bit` `using` `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;`   `        ``// Function call` `        ``Console.Write(``"Position = "` `                      ``+ posOfRightMostDiffBit(m, n));` `    ``}` `}`   `// This code is contributed by Smitha.`

## PHP

 ``

## Javascript

 ``

Output

`Position of rightmost different bit:3`

Time Complexity: O(log2 N), this time complexity is equal to O(1) as one has to check for at most 31 bits only
Auxiliary Space: O(1)

## Position of rightmost different bit using ffs() function:

ffs() function searches the first set bit from the right side and then returns the index of that bit (1-based indexing). So we can use this function on the XOR of both the values to get the index of the rightmost different bit

Below is the implementation of the above approach:

## 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 code` `int` `main()` `{` `    ``int` `m = 52, n = 4;`   `    ``// Function call` `    ``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 code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``int` `m = ``52``, n = ``4``;`   `        ``// Function call` `        ``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 code` `if` `__name__ ``=``=` `'__main__'``:`   `    ``m, n ``=` `52``, ``4`   `    ``# Function call` `    ``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;`   `        ``// Function call` `        ``Console.Write(``"Position = "` `                      ``+ posOfRightMostDiffBit(m, n));` `    ``}` `}`   `// This code is contributed by shivanisinghss2110`

## PHP

 ``

## Javascript

 ``

Output

`Position = 5`

Time Complexity: O(log2 N), this time complexity is equal to O(1) as one has to check for at most 31 bits only
Auxiliary Space: O(1)

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.

Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Previous
Next