Maximize the number by rearranging bits
Last Updated :
13 Jun, 2022
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 <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;
}
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
<?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)
?>
JavaScript
<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>
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 <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;
}
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
<?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)
?>
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
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.
Similar Reads
DSA Tutorial - Learn Data Structures and Algorithms DSA (Data Structures and Algorithms) is the study of organizing data efficiently using data structures like arrays, stacks, and trees, paired with step-by-step procedures (or algorithms) to solve problems effectively. Data structures manage how data is stored and accessed, while algorithms focus on
7 min read
C Programming Language Tutorial C is a general-purpose mid-level programming language developed by Dennis M. Ritchie at Bell Laboratories in 1972. It was initially used for the development of UNIX operating system, but it later became popular for a wide range of applications. Today, C remains one of the top three most widely used
5 min read
Quick Sort QuickSort is a sorting algorithm based on the Divide and Conquer that picks an element as a pivot and partitions the given array around the picked pivot by placing the pivot in its correct position in the sorted array. It works on the principle of divide and conquer, breaking down the problem into s
12 min read
Merge Sort - Data Structure and Algorithms Tutorials Merge sort is a popular sorting algorithm known for its efficiency and stability. It follows the divide-and-conquer approach. It works by recursively dividing the input array into two halves, recursively sorting the two halves and finally merging them back together to obtain the sorted array. Merge
14 min read
SQL Commands | DDL, DQL, DML, DCL and TCL Commands SQL commands are crucial for managing databases effectively. These commands are divided into categories such as Data Definition Language (DDL), Data Manipulation Language (DML), Data Control Language (DCL), Data Query Language (DQL), and Transaction Control Language (TCL). In this article, we will e
7 min read
Data Structures Tutorial Data structures are the fundamental building blocks of computer programming. They define how data is organized, stored, and manipulated within a program. Understanding data structures is very important for developing efficient and effective algorithms. What is Data Structure?A data structure is a st
2 min read
Bubble Sort Algorithm Bubble Sort is the simplest sorting algorithm that works by repeatedly swapping the adjacent elements if they are in the wrong order. This algorithm is not suitable for large data sets as its average and worst-case time complexity are quite high.We sort the array using multiple passes. After the fir
8 min read
Breadth First Search or BFS for a Graph Given a undirected graph represented by an adjacency list adj, where each adj[i] represents the list of vertices connected to vertex i. Perform a Breadth First Search (BFS) traversal starting from vertex 0, visiting vertices from left to right according to the adjacency list, and return a list conta
15+ min read
Binary Search Algorithm - Iterative and Recursive Implementation Binary Search Algorithm is a searching algorithm used in a sorted array by repeatedly dividing the search interval in half. The idea of binary search is to use the information that the array is sorted and reduce the time complexity to O(log N). Binary Search AlgorithmConditions to apply Binary Searc
15 min read
Insertion Sort Algorithm Insertion sort is a simple sorting algorithm that works by iteratively inserting each element of an unsorted list into its correct position in a sorted portion of the list. It is like sorting playing cards in your hands. You split the cards into two groups: the sorted cards and the unsorted cards. T
9 min read