Given a positive number, check if it is a power of 8 or not.

Practice this problem

Approach 1

A simple solution is to calculate log8n for a given number n. If it returns an integral value, then we can say that the number is a power of 8.

The implementation can be seen below in C++, Java, and Python:

C++


Download  Run Code

Output:

32768 is a power of 8

Java


Download  Run Code

Output:

32768 is a power of 8

Python


Download  Run Code

Output:

32768 is a power of 8

Approach 2

The given number n is the power of 8 if it is the power of 2, and its only set bit is present at (0, 3, 6, … , 30) position.

How to check for power of 2?

The expression n & (n-1) will unset the rightmost set bit of a number. If the number is the power of 2, it has only a 1–bit set, and n & (n-1) will unset the only set bit. So, we can say that n & (n-1) returns 0 if n is the power of 2; otherwise, it’s not a power of 2.

We can also the expression (n & -n) == n to check if a positive integer is a power of 2 or not. For more details, refer to this post.

How to check the position of the set bit?

To check the position of its set bit, we can use 0xB6DB6DB6 as a mask. The mask 0xB6DB6DB6 has 0 in all (0, 3, 6, … ,30) position. So if the expression !(n & 0xB6DB6DB6) is true, the position of the set bit in n is even.

(0xB6DB6DB6)16 = (10110110110110110110110110110110)2

Following is the C++, Java, and Python implementation of the idea:

C++


Download  Run Code

Output:

512 is a power of 8

Java


Download  Run Code

Output:

512 is a power of 8

Python


Download  Run Code

Output:

512 is a power of 8

Exercise: Check if the number is a power of 4 or 16 or not. (Hint – Check the bit pattern)

Use mask 0xAAAAAAAA to check for power of 4
Use mask 0xEEEEEEEE to check for power of 16