How to check if number is power of two

In this tutorial, we will see how to check if number is power of two.
There are many approaches to check if number is power of two or not.

Approach 1:

It is very easy and straight forward approach.
  • Run a while loop which checks for condition if n is even number (n%2==0).
  • If n is even then divide it by 2 in each iteration.
  • When you get out of while loop and n is equal to 1 then number is power of two,
  • If number is not equal to 1 then number is not power of two.
public static boolean powerOfTwoGeneral(int n)
 {
  while(n%2==0)
  {
   n=n/2;
  }
  if(n==1)
  {
   return true;
  }
  else
  {
   return false;
  }
 }

Approach 2:

We can use bitwise and operator to check if number is power of two or not.
public static boolean powerOfTwoBitwise(int n)
 {
  return (n & n-1)==0;
 }
It will a very simple way to check if number is power of two. Let's see how it works.
Let's say n is 8. Its binary representation will be : 1000.
binary represetation of 7 will be : 0111.
           1 0 0 0
       & 0 1 1 1
         ----------
          0 0 0 0
         ----------
If number is power of 2, then it will have only one bit set to "1".
For example:
8 :   1000
32 : 100000

Similarly when you  check binary form of 7 and 31, it will have all the bits set to "1"
7 :   111
31:  11111
so if you apply bitwise & operator on n and n-1 and result is 0. It means number is power of two.

Java program to check if number is power of two:

package org.arpit.java2blog;

public class PowerOfTwoMain {

 public static void main(String[] args) {
  System.out.println("128 is power of two : "+powerOfTwoGeneral(128));
  System.out.println("64 is power of two : "+powerOfTwoBitwise(64));
  System.out.println("22 is power of two : "+powerOfTwoBitwise(22));
  System.out.println("22 is power of two : "+powerOfTwoGeneral(22));
 }
 // Approach 1
 public static boolean powerOfTwoGeneral(int n)
 {
  while(n%2==0)
  {
   n=n/2;
  }
  if(n==1)
  {
   return true;
  }
  else
  {
   return false;
  }
 }
 // Approach 2
 public static boolean powerOfTwoBitwise(int n)
 {
  return (n & n-1)==0;
 }

}

When you run above code, you will get below results
128 is power of two : true
64 is power of two : true
22 is power of two : false
324 is power of two : false

Written by Arpit:

If you have read the post and liked it. Please connect with me on Facebook | Twitter | Google Plus

 

Java tutorial for beginners Copyright © 2012