Highest power of two that divides a given number

Given a number n, find the highest power of 2 that divides n.

Examples:

Input : n = 48
Output : 16
Highest power of 2 that divides 48 is 16.

Input : n = 5
Output : 1
Highest power of 2 that divides 5 is 1.



A simple solution is to try all powers of 2 one by one starting from 1, then 2, then 4 and so on.

An efficient solution is based on bit magic. If we take a closer look, we can notice that, we basically need to find the number that has rightmost bit set at same position as n and all other bits as 0. For example, for n = 5 (101), our output is 001. For n = 48 (110000), our output is 010000
How do we find a number that has same rightmost set bit and all other bits as 0?
We follow below steps.

Let n = 48 (00110000)
Subtract one from n, i.e., we do n-1. We get 47(00101111)
Do negation of (n-1), i.e., we do ~(n-1). We get (11010000).
Do n & (~(n-1)), we get 00010000 which has value 16.

Below is the implementation of above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find highest power
// of 2 that divides n.
#include<iostream>
using namespace std;
  
int highestPowerOf2(int n)
{
    return (n & (~(n - 1)));
}
  
int main()
    int n = 48;
    cout << highestPowerOf2(n);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find highest power
// of 2 that divides n.
   
class GFG
{
       
static int highestPowerOf2(int n)
{
    return (n & (~(n - 1)));
}
   
public static void main(String []args)
    int n = 48;
    System.out.println(highestPowerOf2(n));
}
}
  

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find highest power 
# of 2 that divides n. 
  
def highestPowerOf2(n): 
  
    return (n & (~(n - 1))) 
  
  
#Driver code
if __name__=='__main__':
    n = 48
    print(highestPowerOf2(n)) 
  
# this code is contributed 
# by ash264

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find highest power
// of 2 that divides n.
using System;
  
class GFG
{
      
static int highestPowerOf2(int n)
{
    return (n & (~(n - 1)));
}
  
public static void Main()
    int n = 48;
    Console.Write(highestPowerOf2(n));
}
}
  
// This code is contributed
// by Akanksha Rai(Abby_akku)

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find highest power 
// of 2 that divides n. 
  
function highestPowerOf2($n
    return ($n & (~($n - 1))); 
  
// Driver Code
$n = 48; 
echo highestPowerOf2($n); 
  
// This code is contributed 
// by Sach_Code..
?>

chevron_right


Output:

16


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.





Article Tags :
Practice Tags :


2


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.