Program to invert bits of a number Efficiently
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.
Examples:
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.
A 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:
C++
// C++ program to invert actual bits // of a number. #include <bits/stdc++.h> using namespace std; // Function to invert bits of a number int invertBits( int n) { // Calculate number of bits of N-1; int x = log2(n) ; int m = 1 << x; m = m | m - 1; n = n ^ m; return n; } // Driver code int main() { int n = 20; cout << invertBits(n); return 0; } |
Java
// Java program to invert // actual bits of a number. import java.util.*; class GFG { // Function to invert // bits of a number static int invertBits( int n) { // Calculate number of bits of N-1; int x = ( int )(Math.log(n) / Math.log( 2 )) ; int m = 1 << x; m = m | m - 1 ; n = n ^ m; return n; } // Driver code public static void main(String[] args) { int n = 20 ; System.out.print(invertBits(n)); } } // This code is contributed by Smitha |
Python3
# Python3 program to invert actual # bits of a number. import math # Function to invert bits of a number def invertBits(n): # Calculate number of bits of N-1 x = int (math.log(n, 2 )) m = 1 << x m = m | m - 1 n = n ^ m return n # Driver code n = 20 print (invertBits(n)) # This code is contributed 29AjayKumar |
C#
// C# program to invert // actual bits of a number. using System; public class GFG { // Function to invert // bits of a number static int invertBits( int n) { // Calculate number of bits of N-1; int x = ( int )(Math.Log(n) / Math.Log(2)) ; int m = 1 << x; m = m | m - 1; n = n ^ m; return n; } // Driver code public static void Main() { int n = 20; Console.Write(invertBits(n)); } } // This code is contributed by Subhadeep |
PHP
<?php // PHP program to invert actual // bits of a number. // Function to invert bits // of a number function invertBits( $n ) { // Calculate number of // bits of N-1; $x = log( $n , 2); $m = 1 << $x ; $m = $m | $m - 1; $n = $n ^ $m ; return $n ; } // Driver code $n = 20; echo (invertBits( $n )); // This code is contributed // by mits ?> |
Javascript
<script> // Javascript program to invert actual bits // of a number. // Function to invert bits of a number function invertBits(n) { // Calculate number of bits of N-1; let x = parseInt(Math.log(n) / Math.log(2)) ; let m = 1 << x; m = m | m - 1; n = n ^ m; return n; } // Driver code let n = 20; document.write(invertBits(n)); </script> |
11
Time Complexity: O(log2n)
Auxiliary Space: O(1)