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;
}

c++ check if a number is power of 2

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

c++ example to check a number power of 2

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;
}

c++ check if a number is power of 2

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.

Similar tutorials :