# Get the position of rightmost unset bit

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
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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

 ` `

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.

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up

Improved By : vt_m

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.