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.
// An simple C++ program to find // minimum number formed by bits of a // given number. #include <bits/stdc++.h> #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;
} |
// 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) |
# 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) |
// 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 // An simple PHP program to find // minimum number formed by bits // of a given number. function _popcnt32( $number )
{ $counter = 0;
while ( $number > 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) ?> |
<script> // An simple JavaScript program to find // minimum number formed by bits of a // given number. function _popcnt32(number)
{ var counter = 0;
while (number > 0)
{
if (number % 2 == 1)
{
counter++;
}
//or number = number >> 1
number = parseInt(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.
var n = _popcnt32(a);
// Set most significant n bits of res.
var res = 0;
for ( var i=1; i<=n; i++)
res |= (1 << (32 - i));
return Math.abs(res);
} // Driver function. var a = 1;
document.write(maximize(a)); </script> |
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.
// An efficient C++ program to find // minimum number formed by bits of a // given number. #include <bits/stdc++.h> #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;
} |
// 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) |
# 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 |
// 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 // An efficient Java program to // find minimum number formed // by bits of a given number. function _popcnt32( $n )
{ $count = 0;
while ( $n != 0)
{
$n = $n & ( $n - 1);
$count ++;
}
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.
$n = _popcnt32( $a );
// If a$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 $a = 3;
echo (maximize( $a ));
// This code is contributed by // ManishShaw(manishshaw1) ?> |
// 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 |
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.