GeeksforGeeks App
Open App
Browser
Continue

# Maximize the number by rearranging bits

Given an unsigned number, find the maximum number that could be formed by using the bits of the given unsigned number.

Examples :

```Input : 1 (0000....0001)
Output : 2147483648 (1000....0000)

Input : 7 (0000....0111)
Output : 3758096384 (0111....0000)```

Method 1 (Simple)
1. Find binary representation of the number using simple decimal to binary representation technique.
2. Count number of set bits in the binary representation equal to ‘n’.
3. Create a binary representation with its ‘n’ most significant bits set to 1.
4. Convert the binary representation back to the number.

## C++

 `// An simple C++ program to find``// minimum number formed by bits of a``// given number.``#include ``#define ll unsigned int``using` `namespace` `std;` `// Returns maximum number formed by``// bits of a given number.``ll maximize(ll a)``{``    ``// _popcnt32(a) gives number of 1's``    ``// present in binary representation of a.``    ``ll n = _popcnt32(a);` `    ``// Set most significant n bits of res.``    ``ll res = 0;``    ``for` `(``int` `i=1; i<=n; i++)``       ``res |= (1 << (32 - i));` `    ``return` `res;``}` `// Driver function.``int` `main()``{``    ``ll a = 1;``    ``cout << maximize(a) << endl;``    ``return` `0;``}`

## Java

 `// An simple Java program to find``// minimum number formed by bits``// of a given number.``import` `java.io.*;` `class` `GFG``{``    ``private` `static` `int` `_popcnt32(``long` `number)``    ``{``        ``int` `counter = ``0``;``        ` `        ``while``(number > ``0``)``        ``{``            ``if``(number % ``2` `== ``1``)``            ``{``                ``counter++;``            ``}``            ` `            ``//or number = number >> 1``            ``number = number / ``2``;``        ``}``        ``return` `counter;``    ``}``    ` `    ``// Returns maximum number formed``    ``// by bits of a given number.``    ``static` `long` `maximize(``long` `a)``    ``{``        ``// _popcnt32(a) gives number``        ``// of 1's present in binary``        ``// representation of a.``        ``int` `n = _popcnt32(a);``                ` `        ``// Set most significant``        ``// n bits of res.``        ``long` `res = ``0``;``        ``for` `(``int` `i = ``1``; i <= n; i++)``        ``res = (``int``)res | (``1` `<< (``32` `- i));``    ` `        ``return` `Math.abs(res);``    ``}``    ` `    ``// Driver Code``    ``public` `static` `void` `main(String args[])``    ``{``        ``long` `a = ``1``;``        ``System.out.print(maximize(a));``    ``}``}` `// This code is contributed by``// Manish Shaw(manishshaw1)`

## Python3

 `# An simple Python program to``# find minimum number formed``# by bits of a given number.``def` `_popcnt32(number) :``    ``counter ``=` `0``    ` `    ``while``(number > ``0``) :``        ``if``(number ``%` `2` `=``=` `1``) :``            ``counter ``=` `counter ``+` `1``            ` `        ``# or number = number >> 1``        ``number ``=` `int``(number ``/` `2``)` `    ``return` `counter` `# Returns maximum number formed``# by bits of a given number.``def` `maximize(a) :``    ` `    ``# _popcnt32(a) gives number``    ``# of 1's present in binary``    ``# representation of a.``    ``n ``=` `_popcnt32(a)``            ` `    ``# Set most significant``    ``# n bits of res.``    ``res ``=` `0``    ``for` `i ``in` `range``(``1``, n ``+` `1``) :``        ``res ``=` `int``(res |``                 ``(``1` `<< (``32` `-` `i)))` `    ``return` `abs``(res)` `# Driver Code``a ``=` `1``print` `(maximize(a))` `# This code is contributed by``# Manish Shaw(manishshaw1)`

## C#

 `// An simple C# program to find``// minimum number formed by bits``// of a given number.``using` `System;` `class` `GFG``{``    ` `    ``// Returns maximum number formed``    ``// by bits of a given number.``    ``static` `long` `maximize(``long` `a)``    ``{``        ``// _popcnt32(a) gives number``        ``// of 1's present in binary``        ``// representation of a.``        ``string` `binaryString = Convert.ToString(a, 2);``        ``int` `n = binaryString.Split(``new` `[] {``'0'``},``                ``StringSplitOptions.RemoveEmptyEntries).Length;``                ` `        ``// Set most significant n bits of res.``        ``long` `res = 0;``        ``for` `(``int` `i = 1; i <= n; i++)``        ``res = (``int``)res | (1 << (32 - i));``    ` `        ``return` `Math.Abs(res);``    ``}``    ` `    ``// Driver Code.``    ``static` `void` `Main()``    ``{``        ``long` `a = 1;``        ``Console.WriteLine(maximize(a));``    ``}``}``// This code is contributed by``// Manish Shaw(manishshaw1)`

## PHP

 ` 0)``    ``{``        ``if``(``\$number` `% 2 == 1)``        ``{``            ``\$counter``++;``        ``}``        ` `        ``//or number = number >> 1``        ``\$number` `= ``intval``(``\$number` `/ 2);``    ``}``    ``return` `\$counter``;``}` `// Returns maximum number formed``// by bits of a given number.``function` `maximize(``\$a``)``{``    ``// _popcnt32(a) gives number``    ``// of 1's present in binary``    ``// representation of a.``    ``\$n` `= _popcnt32(``\$a``);``            ` `    ``// Set most significant``    ``// n bits of res.``    ``\$res` `= 0;``    ``for` `(``\$i` `= 1; ``\$i` `<= ``\$n``; ``\$i``++)``    ``\$res` `= ``intval``(``\$res` `|``                 ``(1 << (32 - ``\$i``)));` `    ``return` `abs``(``\$res``);``}` `// Driver Code``\$a` `= 1;``echo` `(maximize(``\$a``));` `// This code is contributed by``// Manish Shaw(manishshaw1)``?>`

## Javascript

 ``

Output:

`2147483648`

Method 2 (Efficient)
The idea is to first find a number with n least significant set bits, then shift the number left by 32-n.

## C++

 `// An efficient C++ program to find``// minimum number formed by bits of a``// given number.``#include ``#define ll unsigned int``using` `namespace` `std;` `// Returns maximum number formed by``// bits of a given number.``ll maximize(ll a)``{``    ``// _popcnt32(a) gives number of 1's``    ``// present in binary representation of a.``    ``ll n = _popcnt32(a);``    ` `    ``// If all 32 bits are set.``    ``if` `(n == 32)``      ``return` `a;` `    ``// find a number with n least``    ``// significant set bits.``    ``ll res = (1 << n) - 1;``    ` `    ``// Now shift result by 32 - n``    ``return` `(res << (32 - n)) ;``}` `// Driver function.``int` `main()``{``    ``ll a = 3;``    ``cout << maximize(a) << endl;``    ``return` `0;``}`

## Java

 `// An efficient Java program to``// find minimum number formed``// by bits of a given number.``import` `java.io.*;` `class` `GFG``{``    ``static` `long` `_popcnt32(``long` `n)``    ``{``        ``long` `count = ``0``;``        ``while` `(n != ``0``)``        ``{``            ``n = n & (n - ``1``);``            ``count++;``        ``}``        ``return` `count;``    ``}``    ` `    ``// Returns maximum number``    ``// formed by bits of a``    ``// given number.``    ``static` `long` `maximize(``long` `a)``    ``{``        ``// _popcnt32(a) gives number``        ``// of 1's present in binary``        ``// representation of a.``        ``long` `n = _popcnt32(a);` `        ``// If along 32``        ``// bits are set.``        ``if` `(n == ``32``)``        ``return` `a;``    ` `        ``// find a number with``        ``// n least significant``        ``// set bits.``        ``long` `res = (``1` `<< n) - ``1``;``        ` `        ``// Now shift result``        ``// by 32 - n``        ``return` `(res << (``32` `- n)) ;``    ``}    ``    ` `    ``// Driver Code``    ``public` `static` `void` `main(String args[])``    ``{``        ``long` `a = ``3``;``        ``System.out.print(maximize(a));``    ``}``}` `// This code is contributed by``// ManishShaw(manishshaw1)`

## Python3

 `# An efficient python3 program to find``# minimum number formed by bits of a``# given number.``def` `_popcnt32(n):``    ` `    ``count ``=` `0``    ` `    ``while` `(n !``=` `0``):``        ``n ``=` `n & (n ``-` `1``)``        ``count ``=` `count ``+` `1``        ` `    ``return` `count` `# Returns maximum number formed by``# bits of a given number.``def` `maximize(a):` `    ``# _popcnt32(a) gives number of 1's``    ``# present in binary representation of a.``    ``n ``=` `_popcnt32(a)` `    ``# If all 32 bits are set.``    ``if` `(n ``=``=` `32``):``        ``return` `a` `    ``# Find a number with n least``    ``# significant set bits.``    ``res ``=` `(``1` `<< n) ``-` `1` `    ``# Now shift result by 32 - n``    ``return` `(res << (``32` `-` `n))` `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``a ``=` `3``    ``print``(maximize(a))` `# This code is contributed by nirajgusain5`

## C#

 `// An efficient C# program to``// find minimum number formed``// by bits of a given number.``using` `System;` `class` `GFG``{``    ``static` `long` `_popcnt32(``long` `n)``    ``{``        ``long` `count = 0;``        ``while` `(n != 0)``        ``{``            ``n = n & (n - 1);``            ``count++;``        ``}``        ``return` `count;``    ``}``    ` `    ``// Returns maximum number``    ``// formed by bits of a``    ``// given number.``    ``static` `long` `maximize(``long` `a)``    ``{``        ``// _popcnt32(a) gives number``        ``// of 1's present in binary``        ``// representation of a.``        ``long` `n = _popcnt32(a);` `        ``// If along 32``        ``// bits are set.``        ``if` `(n == 32)``        ``return` `a;``    ` `        ``// find a number with n``        ``// least significant set bits.``        ``long` `res = (1 << Convert.ToInt32(n)) - 1;``        ` `        ``// Now shift result``        ``// by 32 - n``        ``return` `(res << (32 - Convert.ToInt32(n))) ;``    ``}    ``    ` `    ``// Driver Code``    ``static` `void` `Main()``    ``{``        ``long` `a = 3;``        ``Console.WriteLine(maximize(a));``    ``}``}` `// This code is contributed by``// ManishShaw(manishshaw1)`

## PHP

 ``

## Javascript

 `// An efficient JS program to find``// minimum number formed by bits of a``// given number.` `function` `_popcnt32(n)``{``   ``var` `count = 0n;``    ` `    ``while` `(n != 0n)``    ``{``        ``n = n & (n - 1n);``        ``count = count + 1n;``    ``}``        ` `    ``return` `count;``}` `// Returns maximum number formed by``// bits of a given number.``function` `maximize(a)``{` `    ``// _popcnt32(a) gives number of 1's``    ``// present in binary representation of a.``    ``var` `n = _popcnt32(a);` `    ``// If all 32 bits are set.``    ``if` `(n == 32n)``        ``return` `a;` `    ``// Find a number with n least``    ``// significant set bits.``    ``var` `res = (1n << n) - 1n;` `    ``// Now shift result by 32 - n``    ``return` `(res << (32n - n));``}` `var` `a = 3n;``console.log(Number(maximize(a)));` `// This code is contributed by phasing17`

Output:

`3221225472`

Note: The above codes use GCC specific functions. If we wish to write code for other compilers, we may use Count set bits in an integer.

My Personal Notes arrow_drop_up