For example 1, 2, 4, 8, 16, 32, 64, 128, 256,… are integral powers of 2.
There are several methods to check if a number is a power of 2.
Method#1: Using repeated division
If you repeatedly divide the number by 2 (without any remainder), You will finally get a 1 if it is a power of two.
For example if the number is 64
64/2 = 32/2 = 16/2 = 8/2 = 4/2 = 2/2 = 1
If the number is 22
22/2 = 11/2 = 5 (we stop here as there is a non-zero remainder)
public static boolean isPowerOfTwo(int num)
{
if( num <= 0 )
return false;
while( num > 1)
{
if( num %2 != 0)
return false;
num = num/2;
}
return true;
}
Method#2: Counting the set bits
If you consider the binary representation of the numbers, The powers of 2 always contain just one set (1) bit.
For example
1 = 0000 0001
2 = 0000 0010
4 = 0000 0100
8 = 0000 1000
16 = 0001 0000
…
So by counting the number of set bits and checking if it is 1, we can conclude that it is a power of 2
Please check my previous post for counting the set bits in a number.
Method#3: Efficient and clever
This method is also based on an observation of binary representation of numbers.
We all know the Bit-wise and (&) operation . If it is represented by the following table
A B A&B
————–
1 1 1
1 0 0
0 1 0
0 0 0
If the number n is a power of 2, then the bit-wise and operation between n and (n-1) is always 0.
For N = 64 0100 0000 = 64
0011 1111 = 63
————- &
0000 0000
public static boolean isPowerOfTwo(int num)
{
if( num <=< /span> 0 )
return false;
return (num & (num-1)) == 0? true: false;
}