Highest power of 2 less than or equal to given number

14 Jun, 2022
Given a number n, find the highest power of 2 that is smaller than or equal to n.
Examples : 
Input : n = 10
Output : 8

Input : n = 19
Output : 16

Input : n = 32
Output : 32
A simple solution is to start checking from n and keep decrementing until we find a power of 2.  
C++
C
Java
Python3
C#
PHP
Javascript
// C++ program to find highest power of 2 smaller// than or equal to n.#include <bits/stdc++.h>using namespace std; int highestPowerof2(int n){    int res = 0;    for (int i = n; i >= 1; i--) {        // If i is a power of 2        if ((i & (i - 1)) == 0) {            res = i;            break;        }    }    return res;} // Driver codeint main(){    int n = 10;    cout << highestPowerof2(n);    return 0;} // This code is contributed by Sania Kumari Gupta// (kriSania804)
// C program to find highest power of 2 smaller// than or equal to n.#include <stdio.h> int highestPowerof2(int n){    int res = 0;    for (int i = n; i >= 1; i--) {        // If i is a power of 2        if ((i & (i - 1)) == 0) {            res = i;            break;        }    }    return res;} // Driver codeint main(){    int n = 10;    printf("%d", highestPowerof2(n));    return 0;} // This code is contributed by Sania Kumari Gupta// (kriSania804)
// Java program to find highest power of// 2 smaller than or equal to n.class GFG{ static int highestPowerof2(int n){    int res = 0;    for(int i = n; i >= 1; i--)    {                 // If i is a power of 2        if ((i & (i-1)) == 0)        {            res = i;            break;        }    }    return res;} // Driver codepublic static void main(String[] args){    int n = 10;         System.out.print(highestPowerof2(n));}} // This code is contributed by 29AjayKumar
# Python3 program to find highest# power of 2 smaller than or# equal to n.def highestPowerof2(n):     res = 0;    for i in range(n, 0, -1):                 # If i is a power of 2        if ((i & (i - 1)) == 0):                     res = i;            break;             return res; # Driver coden = 10;print(highestPowerof2(n));     # This code is contributed by mits
// C# code to find highest power// of 2 smaller than or equal to n.using System; class GFG{public static int highestPowerof2(int n){    int res = 0;    for (int i = n; i >= 1; i--)        {        // If i is a power of 2        if ((i & (i - 1)) == 0)            {                res = i;                break;            }        }    return res;}         // Driver Code    static public void Main ()    {        int n = 10;        Console.WriteLine(highestPowerof2(n));    }} // This code is contributed by ajit
<?php// PHP program to find highest// power of 2 smaller than or// equal to n.function highestPowerof2($n){    $res = 0;    for ($i = $n; $i >= 1; $i--)    {        // If i is a power of 2        if (($i & ($i - 1)) == 0)        {            $res = $i;            break;        }    }    return $res;} // Driver code$n = 10;echo highestPowerof2($n);     // This code is contributed by m_kit?>
<script> // JavaScript program to find highest power// of 2 smaller than or equal to n.    function highestPowerof2(n)   {     let res = 0;     for (let i = n; i >= 1; i--)        {         // If i is a power of 2          if ((i & (i - 1)) == 0)             {                  res = i;                break;             }        }     return res;   }    // Driver code      let n = 10;      document.write(highestPowerof2(n));   </script>
8
Time complexity : O(n). In worst case, the loop runs floor(n/2) times. The worst case happens when n is of the form 2x – 1.
Auxiliary Space : O(1) since only constant space is used for variables
An efficient solution is to use bitwise left shift operator to find all powers of 2 starting from 1. For every power check if it is smaller than or equal to n or not. Below is the implementation of the idea.
C++
Java
python3
C#
PHP
Javascript
// C++ program to find highest power of 2 smaller// than or equal to n.#include<bits/stdc++.h>using namespace std; int highestPowerof2(unsigned int n){    // Invalid input    if (n < 1)        return 0;     int res = 1;     // Try all powers starting from 2^1    for (int i=0; i<8*sizeof(unsigned int); i++)    {        int curr = 1 << i;         // If current power is more than n, break        if (curr > n)           break;         res = curr;    }     return res;} // Driver codeint main(){    int n = 10;    cout << highestPowerof2(n);    return 0;}
// Java program to find// highest power of 2 smaller// than or equal to n.import java.io.*; class GFG{static int highestPowerof2(int n){    // Invalid input    if (n < 1)        return 0;     int res = 1;     // Try all powers    // starting from 2^1    for (int i = 0; i < 8 * Integer.BYTES; i++)    {        int curr = 1 << i;         // If current power is        // more than n, break        if (curr > n)        break;         res = curr;    }     return res;} // Driver codepublic static void main(String[] args){    int n = 10;    System.out.println(highestPowerof2(n));}} // This code is contributed aj_36
# Python3 program to find highest power of 2 smaller# than or equal to n. import sys def highestPowerof2( n):     # Invalid input    if (n < 1):        return 0      res = 1      #Try all powers starting from 2^1    for i in range(8*sys.getsizeof(n)):             curr = 1 << i          # If current power is more than n, break        if (curr > n):             break          res = curr      return res  # Driver codeif __name__ == "__main__":     n = 10    print(highestPowerof2(n))   
// C# program to find// highest power of 2 smaller// than or equal to n.using System; class GFG{static int highestPowerof2(int n){    // Invalid input    if (n < 1)        return 0;     int res = 1;     // Try all powers    // starting from 2^1    for (int i = 0; i < 8 * sizeof(uint); i++)    {        int curr = 1 << i;         // If current power is        // more than n, break        if (curr > n)        break;         res = curr;    }     return res;} // Driver codestatic public void Main (){    int n = 10;    Console.WriteLine(highestPowerof2(n));}} // This code is contributed ajit
<?php// PHP program to find highest// power of 2 smaller// than or equal to n. function highestPowerof2($n){    // Invalid input    if ($n < 1)        return 0;     $res = 1;     // Try all powers starting    // from 2^1    for ($i = 0; $i < 8 * PHP_INT_SIZE; $i++)    {        $curr = 1 << $i;         // If current power is        // more than n, break        if ($curr > $n)        break;         $res = $curr;    }     return $res;} // Driver code$n = 10;echo highestPowerof2($n);     // This code is contributed// by m_kit?>
<script>  function highestPowerof2(n){    // Invalid input    if (n < 1)        return 0;     let res = 1;     // Try all powers starting from 2^1    for (let i=0; i<8; i++)    {        let curr = 1 << i;         // If current power is more than n, break        if (curr > n)           break;         res = curr;    }     return res;} // Driver code let n = 10;document.write(highestPowerof2(n)); </script>
8
Time Complexity: O(32)
Auxiliary Space: O(1)
A Solution using Log(n)Thanks to Anshuman Jha for suggesting this solution. 
C++
Java
Python3
C#
PHP
Javascript
// C++ program to find highest power of 2 smaller// than or equal to n.#include<bits/stdc++.h>using namespace std; int highestPowerof2(int n){   int p = (int)log2(n);   return (int)pow(2, p);} // Driver codeint main(){    int n = 10;    cout << highestPowerof2(n);    return 0;}
// Java program to find// highest power of 2// smaller than or equal to n.import java.io.*; class GFG{static int highestPowerof2(int n){         int p = (int)(Math.log(n) /                  Math.log(2));    return (int)Math.pow(2, p);} // Driver codepublic static void main (String[] args){    int n = 10;    System.out.println(highestPowerof2(n));}} // This code is contributed// by m_kit
# Python3 program to find highest# power of 2 smaller than or# equal to n.import math def highestPowerof2(n):     p = int(math.log(n, 2));    return int(pow(2, p)); # Driver coden = 10;print(highestPowerof2(n)); # This code is contributed by mits
// C# program to find// highest power of 2// smaller than or equal to n.using System; class GFG{static int highestPowerof2(int n){    int p = (int)(Math.Log(n) /                   Math.Log(2));    return (int)Math.Pow(2, p);} // Driver codestatic public void Main (){    int n = 10;    Console.WriteLine(highestPowerof2(n));}} // This code is contributed// by ajit
<?php// PHP program to find highest// power of 2 smaller than or// equal to n.function highestPowerof2($n){    $p = (int)log($n, 2);    return (int)pow(2, $p);} // Driver code$n = 10;echo highestPowerof2($n); // This code is contributed by ajit?>
<script>    // Javascript program to find    // highest power of 2    // smaller than or equal to n.         function highestPowerof2(n)    {        let p = parseInt(Math.log(n) / Math.log(2), 10);        return Math.pow(2, p);    }         let n = 10;    document.write(highestPowerof2(n));         // This code is contributed by divyeshrabadiya07.</script>
8
Time Complexity: O(logn)
Auxiliary Space: O(1)
Solution using bitmasks :
C++
Java
Python3
C#
Javascript
// C++ program to find highest power of 2 smaller// than or equal to n.#include <iostream>using namespace std; unsigned highestPowerof2(unsigned x){    // check for the set bits    x |= x >> 1;    x |= x >> 2;    x |= x >> 4;    x |= x >> 8;    x |= x >> 16;     // Then we remove all but the top bit by xor'ing the    // string of 1's with that string of 1's shifted one to    // the left, and we end up with just the one top bit    // followed by 0's.    return x ^ (x >> 1);} int main(){     int n = 10;    cout << highestPowerof2(n) << "\n";     return 0;} // This code is contributed by Rudrakshi.
// Java program to find highest power of 2 smaller// than or equal to n.import java.io.*;class GFG{         static int highestPowerof2(int x)    {               // check for the set bits        x |= x >> 1;        x |= x >> 2;        x |= x >> 4;        x |= x >> 8;        x |= x >> 16;                 // Then we remove all but the top bit by xor'ing the        // string of 1's with that string of 1's shifted one to        // the left, and we end up with just the one top bit        // followed by 0's.        return x ^ (x >> 1);          }       // Driver code    public static void main (String[] args)    {               int n = 10;        System.out.println(highestPowerof2(n));    }} // This code is contributed by avanitrachhadiya2155
# Python3 program to find highest power of 2 smaller than or equal to n. def highestPowerof2(x):    # check for the set bits    x |= x >> 1    x |= x >> 2    x |= x >> 4    x |= x >> 8    x |= x >> 16         # Then we remove all but the top bit by xor'ing the    # string of 1's with that string of 1's shifted one to    # the left, and we end up with just the one top bit    # followed by 0's.    return x ^ (x >> 1) n = 10print(highestPowerof2(n)) # This code is contributed by divyesh072019.
// C# program to find highest power of 2 smaller// than or equal to n.using System;public class GFG{   static int highestPowerof2(int x)  {     // check for the set bits    x |= x >> 1;    x |= x >> 2;    x |= x >> 4;    x |= x >> 8;    x |= x >> 16;     // Then we remove all but the top bit by xor'ing the    // string of 1's with that string of 1's shifted one to    // the left, and we end up with just the one top bit    // followed by 0's.    return x ^ (x >> 1);    }   // Driver code  public static void Main(String[] args)  {           int n = 10;    Console.WriteLine(highestPowerof2(n));  }} // This code is contributed by umadevi9616
<script>// Javascript program to find highest power of 2 smaller// than or equal to n.function highestPowerof2(x){     // check for the set bits    x |= x >> 1;    x |= x >> 2;    x |= x >> 4;    x |= x >> 8;    x |= x >> 16;      // Then we remove all but the top bit by xor'ing the    // string of 1's with that string of 1's shifted one to    // the left, and we end up with just the one top bit    // followed by 0's.    return x ^ (x >> 1);} let n = 10;document.write(highestPowerof2(n)) // This code is contributed by rag2127</script>
8
Time Complexity: O(1)
Auxiliary Space: O(1) since only constant space is used for variables
A solution using MSB
If the given number is the power of two then it is the required number otherwise set only the most significant bit which gives us the required number.
C++
// C++ program to find// smallest power of 2// smaller than or equal to n#include <iostream>using namespace std; long long highestPowerof2(long long N){    // if N is a power of two simply return it    if (!(N & (N - 1)))        return N;    // else set only the most significant bit    return 0x8000000000000000 >> (__builtin_clzll(N));} // Driver Codeint main(){    long long n = 5;    cout << highestPowerof2(n);    return 0;} // This code is contributed by phasing17
4
Time Complexity : O(1) as counting leading zeroes can cause at most O(64) time complexity.Auxiliary Space: O(1)
Application Problem: Some people are standing in a queue. A selection process follows a rule where people standing on even positions are selected. Of the selected people a queue is formed and again out of these only people on even position are selected. This continues until we are left with one person. Find out the position of that person in the original queue. Print the position(original queue) of that person who is left. 
Examples : 
Input: n = 10
Output:8
Explanation : 
1 2 3 4 5 6 7 8 9 10  ===>Given queue
    2 4 6 8 10
       4 8
        8

Input: n = 17
Input: 16
Explanation : 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17  ===>Given queue
        2 4 6 8 10 12 14 16
            4 8 12 16
              8 16
               16
Related Article : Power of 2 greater than or equal to a given number.This article is contributed by Sahil Chhabra. 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.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
jit_t
Mithun Kumar
ukasp
AmulyaSahoo
chinmoy1997pal
mohit kumar 29
divyeshrabadiya07
29AjayKumar
sonirudrakshi99
rag2127
avanitrachhadiya2155
umadevi9616
divyesh072019
phasing17
krisania804
technophpfij
Amazon
Bit Magic
Mathematical
Recursion
Amazon
Mathematical
Recursion
Bit Magic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Little and Big Endian Mystery
Bits manipulation (Important tactics)
Binary representation of a given number
Josephus problem | Set 1 (A O(n) Solution)
Divide two integers without using multiplication, division and mod operator
Program for Fibonacci numbers
Set in C++ Standard Template Library (STL)
Write a program to print all permutations of a given string
C++ Data Types
Merge two sorted arrays