Given a non-negative integer N. The task is to invert the bits of the number N and print the decimal equivalent of the number obtained after inverting the bits.
Note: Leading 0’s are not being considered.
Input : 11 Output : 4 (11)10 = (1011)2 After inverting the bits, we get: (0100)2 = (4)10. Input : 20 Output : 11 (20)10 = (10100)2. After inverting the bits, we get: (01011)2 = (11)10.
The similar problem is already discussed in Invert actual bits of a number.
In this article, an efficient approach using bitwise operators is discussed. Below is the step by step algorithm to solve the problem:
- Calculate the total number of bits in the given number. This can be done by calculating:
X = log2N
Where, N is the given number and X is the total number of bits of N.
- The next step is to generate a number with X bits and all bits set. That is, 11111….X-times. This can be done by calculating:
Step-1: M = 1 << X Step-2: M = M | (M-1)
Where M is the required X-bit number with all bits set.
- The final step is to calculate the bit-wise XOR of M with N, which will be our answer.
Below is the implementation of the above approach:
Time Complexity: O(log2n)
Auxiliary Space: O(1)
- Invert actual bits of a number
- Program to count number of set bits in an (big) array
- Write an Efficient C Program to Reverse Bits of a Number
- Check if bits of a number has count of consecutive set bits in increasing order
- Finding the Parity of a number Efficiently
- Toggle bits of a number except first and last bits
- Maximize a given unsigned number number by swapping bits at it's extreme positions.
- Maximum number of contiguous array elements with same number of set bits
- Check if a number has same number of set and unset bits
- Set all odd bits of a number
- Same Number Of Set Bits As N
- Set all even bits of a number
- Toggle all the bits of a number except k-th bit.
- Check if all bits of a number are set
- Change all even bits in a number to 0
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.