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