Related Articles

# Get the position of rightmost unset bit

• Difficulty Level : Easy
• Last Updated : 05 Apr, 2021

Given a non-negative number n. Find the position of rightmost unset bit in the binary representation of n, considering the last bit at position 1, 2nd last bit at position 2 and so on. If no 0’s are there in the binary representation of n. then print “-1”.
Examples:

```Input : n = 9
Output : 2
(9)10 = (1001)2
The position of rightmost unset bit in the binary
representation of 9 is 2.

Input : n = 32
Output : 1```

Approach: Following are the steps:

1. If n = 0, return 1.
2. If all bits of n are set, return -1. Refer this post.
3. Else perform bitwise not on the given number(operation equivalent to 1’s complement). Let it be num = ~n.
4. Get the position of rightmost set bit of num. This will be the position of rightmost unset bit of n.

## C++

 `// C++ implementation to get the position of rightmost unset bit``#include ` `using` `namespace` `std;` `// function to find the position``// of rightmost set bit``int` `getPosOfRightmostSetBit(``int` `n)``{``    ``return` `log2(n&-n)+1;``}` `// function to get the position of rightmost unset bit``int` `getPosOfRightMostUnsetBit(``int` `n)``{``    ``// if n = 0, return 1``    ``if` `(n == 0)``        ``return` `1;``    ` `    ``// if all bits of 'n' are set``    ``if` `((n & (n + 1)) == 0)   ``        ``return` `-1;``    ` `    ``// position of rightmost unset bit in 'n'``    ``// passing ~n as argument``    ``return` `getPosOfRightmostSetBit(~n);       ``}` `// Driver program to test above``int` `main()``{``    ``int` `n = 9;``    ``cout << getPosOfRightMostUnsetBit(n);``    ``return` `0;``}`

## Java

 `// Java implementation to get the``// position of rightmost unset bit` `class` `GFG {``    ` `// function to find the position``// of rightmost set bit``static` `int` `getPosOfRightmostSetBit(``int` `n)``{``    ``return` `(``int``)((Math.log10(n & -n)) / Math.log10(``2``)) + ``1``;``}` `// function to get the position``// of rightmost unset bit``static` `int` `getPosOfRightMostUnsetBit(``int` `n) {``    ` `    ``// if n = 0, return 1``    ``if` `(n == ``0``)``    ``return` `1``;` `    ``// if all bits of 'n' are set``    ``if` `((n & (n + ``1``)) == ``0``)``    ``return` `-``1``;` `    ``// position of rightmost unset bit in 'n'``    ``// passing ~n as argument``    ``return` `getPosOfRightmostSetBit(~n);``}` `// Driver code``public` `static` `void` `main(String arg[])``{``    ``int` `n = ``9``;``    ``System.out.print(getPosOfRightMostUnsetBit(n));``}``}` `// This code is contributed by Anant Agarwal.`

## Python3

 `# Python3 implementation to get the position``# of rightmost unset bit` `# import library``import` `math as m`` ` `# function to find the position``# of rightmost set bit``def` `getPosOfRightmostSetBit(n):``    ` `    ``return` `(m.log(((n & ``-` `n) ``+` `1``),``2``))` ` ` `# function to get the position ot rightmost unset bit``def` `getPosOfRightMostUnsetBit(n):``    ` `    ``# if n = 0, return 1``    ``if` `(n ``=``=` `0``):``        ``return` `1``     ` `    ``# if all bits of 'n' are set``    ``if` `((n & (n ``+` `1``)) ``=``=` `0``):``        ``return` `-``1``     ` `    ``# position of rightmost unset bit in 'n'``    ``# passing ~n as argument``    ``return` `getPosOfRightmostSetBit(~n)   ` ` ` `# Driver program to test above``n ``=` `13``;``ans ``=` `getPosOfRightMostUnsetBit(n)` `#rounding the final answer``print` `(``round``(ans))` `# This code is contributed by Saloni Gupta.`

## C#

 `// C# implementation to get the``// position of rightmost unset bit``using` `System;` `class` `GFG``{``    ``// function to find the position``    ``// of rightmost set bit``    ``static` `int` `getPosOfRightmostSetBit(``int` `n)``    ``{``        ``return` `(``int``)((Math.Log10(n & -n)) / Math.Log10(2)) + 1;``    ``}``    ` `    ``// function to get the position``    ``// of rightmost unset bit``    ``static` `int` `getPosOfRightMostUnsetBit(``int` `n) {``        ` `        ``// if n = 0, return 1``        ``if` `(n == 0)``        ``return` `1;``    ` `        ``// if all bits of 'n' are set``        ``if` `((n & (n + 1)) == 0)``        ``return` `-1;``    ` `        ``// position of rightmost unset bit in 'n'``        ``// passing ~n as argument``        ``return` `getPosOfRightmostSetBit(~n);``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{``        ``int` `n = 9;``        ``Console.Write(getPosOfRightMostUnsetBit(n));``    ``}``}` `// This code is contributed by Sam007`

## PHP

 ``

## Javascript

 ``

Output:

`2`

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