# Toggle all bits after most significant bit

• Difficulty Level : Hard
• Last Updated : 14 Jul, 2022

Given a number, toggle all bits of it after most significant bit including most significant bit.

Examples :

```Input : 10
Output : 5
Binary representation of 10 is 1010
After toggling we get 0101

Input : 5
Output : 2```

We can toggle a bit by doing XOR of it with 1 (Note that 1 ^ 0 = 1 and 1 ^ 1 = 0). The idea is to take a number temp with only one bit set. One by one move the only set bit of temp to left and do XOR of it with n until it crosses MSB (Most Significant Bit) of n.

## C++

 `// CPP program to toggle set  bits starting``// from MSB``#include``using` `namespace` `std;` `void` `toggle(``int` `&n)``{``    ``// temporary variable to``    ``// use XOR with one of a n``    ``int` `temp = 1;` `    ``// Run loop until the only``    ``// set bit in temp crosses``    ``// MST of n.``    ``while` `(temp <= n)``    ``{``        ``// Toggle bit of n``        ``// corresponding to``        ``// current set bit in``        ``// temp.``        ``n = n ^ temp;` `        ``// Move set bit to next``        ``// higher position.``        ``temp = temp << 1;``    ``}``}` `// Driver code``int` `main()``{``    ``int` `n = 10;``    ``toggle(n);``    ``cout << n;``    ``return` `0;``}`

## Java

 `// Java program to toggle set``// bits starting from MSB` `class` `GFG {``    ` `static` `int` `toggle(``int` `n) {``    ` `    ``// temporary variable to``    ``// use XOR with one of a n``    ``int` `temp = ``1``;` `    ``// Run loop until the only``    ``// set bit in temp crosses``    ``// MST of n.``    ``while` `(temp <= n) {``        ` `    ``// Toggle bit of n``    ``// corresponding to``    ``// current set bit in``    ``// temp.``    ``n = n ^ temp;` `    ``// Move set bit to next``    ``// higher position.``    ``temp = temp << ``1``;``    ``}``    ``return` `n;``}` `// Driver code``public` `static` `void` `main(String arg[])``{``    ``int` `n = ``10``;``    ``n = toggle(n);``    ``System.out.print(n);``}``}` `// This code is contributed by Anant Agarwal.`

## Python3

 `# Python program to toggle``# set  bits starting``# from MSB` `def` `toggle(n):` `    ``# temporary variable to``    ``# use XOR with one of a n``    ``temp ``=` `1`` ` `    ``#Run loop until the only``    ``#set bit in temp crosses``    ``#MST of n.``    ``while` `(temp <``=` `n):``    ` `        ``# Toggle bit of n``        ``# corresponding to``        ``# current set bit in``        ``# temp.``        ``n ``=` `n ^ temp`` ` `        ``# Move set bit to next``        ``# higher position.``        ``temp ``=` `temp << ``1` `    ``return` `n`` ` `# Driver code` `n ``=` `10``n``=``toggle(n)``print``(n)` `# This code is contributed``# by Anant Agarwal.`

## C#

 `// C# program to toggle set``// bits starting from MSB``using` `System;` `class` `GFG {` `// Function to toggle bits``// starting from MSB   ``static` `int` `toggle(``int` `n) {``    ` `    ``// temporary variable to``    ``// use XOR with one of a n``    ``int` `temp = 1;` `    ``// Run loop until the only``    ``// set bit in temp crosses``    ``// MST of n.``    ``while` `(temp <= n) {``        ` `    ``// Toggle bit of n``    ``// corresponding to``    ``// current set bit in``    ``// temp.``    ``n = n ^ temp;` `    ``// Move set bit to next``    ``// higher position.``    ``temp = temp << 1;``    ``}``    ``return` `n;``}` `// Driver code``public` `static` `void` `Main()``{``    ``int` `n = 10;``    ``n = toggle(n);``    ``Console.Write(n);``}``}` `// This code is contributed by Nitin Mittal.`

## PHP

 ``

## Javascript

 ``

Output

`5`

Time Complexity: O(log n)

Auxiliary Space: O(1)

The above solution can be optimized to work in O(1) time under the assumption that numbers are stored in 32 bits.

## C++

 `// CPP program to toggle set  bits starting``// from MSB``#include``using` `namespace` `std;` `// Returns a number which has all set bits``// starting from MSB of n``int` `setAllBitsAfterMSB(``int` `n)``{   ``    ``// This makes sure two bits``    ``// (From MSB and including MSB)``    ``// are set``    ``n |= n>>1;` `    ``// This makes sure 4 bits``    ``// (From MSB and including MSB)``    ``// are set``    ``n |= n>>2;  ` `    ``n |= n>>4; ``    ``n |= n>>8;``    ``n |= n>>16;``    ``return` `n;``}` `void` `toggle(``int` `&n)``{``    ``n = n ^ setAllBitsAfterMSB(n);``}` `// Driver code``int` `main()``{``    ``int` `n = 10;``    ``toggle(n);``    ``cout << n;``    ``return` `0;``}`

## Java

 `// Java program to toggle set bits``// starting from MSB` `class` `GFG {``    ` `// Returns a number which has all``// set bits starting from MSB of n``static` `int` `setAllBitsAfterMSB(``int` `n) {``    ` `    ``// This makes sure two bits``    ``// (From MSB and including MSB)``    ``// are set``    ``n |= n >> ``1``;` `    ``// This makes sure 4 bits``    ``// (From MSB and including MSB)``    ``// are set``    ``n |= n >> ``2``;` `    ``n |= n >> ``4``;``    ``n |= n >> ``8``;``    ``n |= n >> ``16``;``    ``return` `n;``}``static` `int` `toggle(``int` `n)``{``    ``n = n ^ setAllBitsAfterMSB(n);``    ``return` `n;``}` `// Driver code``public` `static` `void` `main(String arg[])``{``    ``int` `n = ``10``;``    ``n = toggle(n);``    ``System.out.print(n);``}``}` `// This code is contributed by Anant Agarwal.`

## Python3

 `# Python program to toggle set  bits starting``# from MSB` `# Returns a number which has all set bits``# starting from MSB of n``def` `setAllBitsAfterMSB(n):`` ` `    ``# This makes sure two bits``    ``# (From MSB and including MSB)``    ``# are set``    ``n |``=` `n>>``1`` ` `    ``# This makes sure 4 bits``    ``# (From MSB and including MSB)``    ``# are set``    ``n |``=` `n>>``2`  ` ` `    ``n |``=` `n>>``4` `    ``n |``=` `n>>``8``    ``n |``=` `n>>``16``    ``return` `n` `def` `toggle(n):` `    ``n ``=` `n ^ setAllBitsAfterMSB(n)``    ``return` `n``    ` `#Driver code` `n ``=` `10``n``=``toggle(n)``print``(n)``# This code is contributed by Anant Agarwal.`

## C#

 `// C# program to toggle set bits``// starting from MSB``using` `System;` `class` `GFG {``        ` `    ``// Returns a number which has all``    ``// set bits starting from MSB of n``    ``static` `int` `setAllBitsAfterMSB(``int` `n)``    ``{``        ` `        ``// This makes sure two bits``        ``// (From MSB and including MSB)``        ``// are set``        ``n |= n >> 1;``    ` `        ``// This makes sure 4 bits``        ``// (From MSB and including MSB)``        ``// are set``        ``n |= n >> 2;``    ` `        ``n |= n >> 4;``        ``n |= n >> 8;``        ``n |= n >> 16;``        ``return` `n;``    ``}``    ` `    ``static` `int` `toggle(``int` `n)``    ``{``        ``n = n ^ setAllBitsAfterMSB(n);``        ``return` `n;``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{``        ``int` `n = 10;``        ``n = toggle(n);``        ``Console.WriteLine(n);``    ``}``}` `// This code is contributed by Sam007.`

## PHP

 `> 1;` `    ``// This makes sure 4 bits``    ``// (From MSB and including MSB)``    ``// are set``    ``\$n` `|= ``\$n` `>> 2;` `    ``\$n` `|= ``\$n` `>> 4;``    ``\$n` `|= ``\$n` `>> 8;``    ``\$n` `|= ``\$n` `>> 16;``    ``return` `\$n``;``}``function` `toggle(&``\$n``)``{``    ``\$n` `= ``\$n` `^ setAllBitsAfterMSB(``\$n``);``}` `// Driver Code``\$n` `= 10;``toggle(``\$n``);``echo` `\$n``;` `// This code is contributed by ajit``?>`

## Javascript

 ``

Output

`5`

Time Complexity: O(1)

Auxiliary Space: O(1)

Thanks to Devanshu Agarwal for suggesting this approach.

Another Approach:

To toggle a specific bit, we can take XOR of that bit with 1.

Therefore, for an n – bit number, we can construct a binary mask of the form 1111….11111, ie, all n bits are set. This is nothing but 2n – 1.

The implementation is shown below:

## C++

 `// CPP program to toggle set  bits starting``// from MSB``#include``using` `namespace` `std;` `// Returns a number which has all set bits``// starting from MSB of n``int` `toggle(``int` `num)``{  ``    ``//the number of bits is equal to log2num + 1``    ``int` `n = (``int``)log2(num) + 1;``    ``//calculating mask``    ``int` `mask = ``pow``(2, n) - 1;``    ``//toggling bits using xor with mask``    ``return` `num ^ mask;``}`  `// Driver code``int` `main()``{``    ``int` `num = 10;``    ``cout << toggle(num);``}` `//this code is contributed by phasing17`

## Java

 `// Java program to toggle set  bits starting``// from MSB``import` `java.util.*;` `class` `GFG {` `  ``// Returns a number which has all set bits``  ``// starting from MSB of n``  ``static` `int` `toggle(``int` `num)``  ``{``    ``// the number of bits is equal to log2num + 1``    ``int` `n = (``int``)(Math.log(num) / Math.log(``2``)) + ``1``;` `    ``// calculating mask``    ``int` `mask = (``int``)Math.pow(``2``, n) - ``1``;` `    ``// toggling bits using xor with mask``    ``return` `num ^ mask;``  ``}` `  ``// Driver code``  ``public` `static` `void` `main(String[] args)``  ``{``    ``int` `num = ``10``;``    ``System.out.println(toggle(num));``  ``}``}` `// this code is contributed by phasing17`

## Python3

 `# Python3 program to toggle set``# bits starting from MSB``from` `math ``import` `log` `# Returns a number which has all set bits``# starting from MSB of n``def` `toggle(num):` `    ``# the number of bits is equal to log2num + 1``    ``n ``=` `int``(log(num, ``2``)) ``+` `1` `    ``# calculating mask``    ``mask ``=` `pow``(``2``, n) ``-` `1` `    ``# toggling bits using xor with mask``    ``return` `num ^ mask` `# Driver code``num ``=` `10``print``(toggle(num))` `# This code is contributed by phasing17`

## C#

 `// C# program to toggle set  bits starting``// from MSB``using` `System;` `class` `GFG {` `  ``// Returns a number which has all set bits``  ``// starting from MSB of n``  ``static` `int` `toggle(``int` `num)``  ``{``    ` `    ``// the number of bits is equal to log2num + 1``    ``int` `n = (``int``)(Math.Log(num) / Math.Log(2)) + 1;` `    ``// calculating mask``    ``int` `mask = (``int``)Math.Pow(2, n) - 1;` `    ``// toggling bits using xor with mask``    ``return` `num ^ mask;``  ``}` `  ``// Driver code``  ``public` `static` `void` `Main(``string``[] args)``  ``{``    ``int` `num = 10;``    ``Console.WriteLine(toggle(num));``  ``}``}` `// This code is contributed by phasing17`

## Javascript

 `// JavaScript program to toggle set``// bits starting from MSB` `// Returns a number which has all set bits``// starting from MSB of n``function` `toggle(num)``{  ``    ``// the number of bits is equal to log2num + 1``    ``let n = Math.floor((Math.log(num) / Math.log(2)) + 1);``    ` `    ``// calculating mask``    ``let mask = Math.pow(2, n) - 1;``    ` `    ``// toggling bits using xor with mask``    ``return` `num ^ mask;``}` `// Driver code``let num = 10;``console.log(toggle(num));` `// this code is contributed by phasing17`

Output

`5`

Time Complexity: O(logn)

Auxiliary Space: O(1)

This article is contributed by Devanshu Agarwal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.