Program to invert bits of a number Efficiently

28 Apr, 2021
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 = log2NWhere 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.
Calculate the total number of bits in the given number. This can be done by calculating:X = log2NWhere N is the given number and X is the total number of bits of N.
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.
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++
Java
Python3
C#
PHP
Javascript
// C++ program to invert actual bits// of a number.#include <bits/stdc++.h>  using namespace std;  // Function to invert bits of a numberint 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 codeint main(){    int n = 20;      cout << invertBits(n);      return 0;}
// 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 program to invert actual# bits of a number.import math  # Function to invert bits of a numberdef 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 coden = 20  print(invertBits(n))  # This code is contributed 29AjayKumar
// 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 program to invert actual // bits of a number.  // Function to invert bits // of a numberfunction 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?>
<script>  // Javascript program to invert actual bits// of a number.  // Function to invert bits of a numberfunction 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) 
ayushjauhari14
Smitha Dinesh Semwal
tufan_gupta2000
Mithun Kumar
29AjayKumar
subham348
Algorithms-Bit Algorithms
Bitwise-XOR
setBitCount
Bit Magic
Bit Magic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.