How to set the rightmost unset bit in a number
Overview
In this shot, we’re going to look at how to set the rightmost unset bit of an input number and return the number obtained.
For example, given an input of , we’ll obtain an output of . This is because in binary form is . When we set its rightmost unset bit, we get , that is, .
As another example, we get an output of when we provide an input of . This is because in binary form is . There are no unset bits in the binary representation of . Hence, the value returned is also .
Note: Refer to How to check if all bits are set in a number? to check if all bits in a number are set.
Test expression
Now, let’s test the following expression:
n | (n + 1)
The above expression sets the rightmost unset bit. But it may set a leading zero bit if the given number doesn’t contain any unset bits. For example, consider setting n=7 in the above function:
| Expression | Result |
|---|---|
| n=7 | 0111 |
| n+1=8 | 1000 |
| n | (n + 1) |
Though there are no unset bits in , the expression n | (n + 1) still sets the rightmost unset bit.
Hence, it’s essential first to check if there are no unset bits in the given number.
Code
class Main{static int setRightmostUnsetBit(int n){if((n & (n+1)) == 0) return n;return (n | (n+1));}public static void main(String[] args) {int n = 8;System.out.println("Setting the rightmost unset bit of " + n + " we get " + setRightmostUnsetBit(n));}}
Explanation
- Lines 3–6: We define the
setRightmostUnsetBit()such that it implements the solution discussed above to set the rightmost unset bit ofn. - Line 9: We define
n. - Line 10: We call
setRightmostUnsetBit()withnas a parameter.