# C++ program to check if a number is power of 2 or not using its binary

## Introduction :

In this C++ program, we will learn how to check if a number is power of 2 or not using its binary representation. The first method will use bitwise AND operation and the second one will count the number of 1 in its binary form.

### Method 1: Using bitwise operation :

Letâ€™s take a look at the binary representation of 0 to 16.

``````0   0
1	1 *
2	10 *
3	11
4	100 *
5	101
6	110
7	111
8	1000 *
9	1001
10	1010
11	1011
12	1100
13	1101
14	1110
15	1111
16	10000 *
``````

The rows with star marked are the rows for the power of 2. As you can see here, if a number is n power of 2, its binary representation will be 1 followed by n times 0. For example, 16 is 2 to the power 4. So, its binary representation is 10000 or 1 followed by 4 zeros.

One more thing to notice here is that the number prior to the power of 2 has its binary representation with only 1. Check 1, 7 and 15 in the above list. 0 is an exception here.

Using the above two concepts, we can find out if a number is the power of two or not using a single logical AND operation. If a number is the power of 2, we can do one logical AND with the number and the previous number and the result will be 0 always. For example :

``````15 : 0 1 1 1 1
16 : 1 0 0 0 0
--------------
& : 0 0 0 0 0
``````

Here, the logical AND of 15 and 16 is 0.

### C++ program :

In C++, for AND operation, & is used. We can write the above logic in code like below :

``````#include <iostream>
using namespace std;

int main()
{
int number;
cout << "Enter a positive number : "; cin >> number;

if (number <= 0)
{
cout << "Please enter a valid number.";
}
else
{
if ((number & (number - 1)) == 0)
{
cout << number << " is a power of two number" << endl;
}
else
{
cout << number << " is not a power of two number" << endl;
}
}

return 0;
}
``````

### Sample Output :

``````Enter a positive number : 16
16 is a power of two number

Enter a positive number : 22
16 is not a power of two number
``````

### Method 2: By counting the number of 1 in its binary form :

We have seen before that if a number is the power of two, it has only one 1 in its binary form. So, we can calculate the total number of 1 in its binary to find out if it is the power of two or not.

The easiest way to calculate the total number of 1 is to keep calculating the AND of the number and its previous number until the result is 0. The number of steps required to get 0 is the total number of 1.

### C++ program :

``````#include <iostream>
using namespace std;

int main()
{
int number;
cout << "Enter a positive number : "; cin >> number;

if (number <= 0)
{
cout << "Please enter a valid number.";
}
else
{
int count = 0;

while(number != 0){
number = number & (number - 1);
count ++;
}

cout << count<<endl;
if (count == 1)
{
cout << "It is a power of two" << endl;
}
else
{
cout << "It is not a power of two" << endl;
}
}

return 0;
}
``````

Actually, this is the same as the first method. If the value of count is greater than 1 in the while loop, we can just skip and say that this is not a power of two. In the previous solution, we were checking if the AND of a number and its previous number is 0 or not i.e. if the value of count is 1 or not as per the second solution.

It will give the same result for a number as the first solution.

### Conclusion :

We have learned two different ways to verify if a number is the power of two or not. Try to run these examples on your machine and drop one comment below if you have any queries.