# Program to find whether a no is power of two

Given a positive integer, write a function to find if it is a power of two or not.

Examples :

```Input : n = 4
Output : Yes
22 = 4

Input : n = 7
Output : No

Input : n = 32
Output : Yes
25 = 32
```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

1. A simple method for this is to simply take the log of the number on base 2 and if you get an integer then number is power of 2.

## C++

 `// C++ Program to find whether a ` `// no is power of two ` `#include ` `using` `namespace` `std; ` ` `  `// Function to check if x is power of 2 ` `bool` `isPowerOfTwo(``int` `n) ` `{ ` `   ``if``(n==0) ` `   ``return` `false``; ` ` `  `   ``return` `(``ceil``(log2(n)) == ``floor``(log2(n))); ` `} ` ` `  `// Driver program ` `int` `main() ` `{ ` `    ``isPowerOfTwo(31)? cout<<``"Yes"``<

## C

 `// C Program to find whether a ` `// no is power of two ` `#include ` `#include ` `#include ` ` `  `/* Function to check if x is power of 2*/` `bool` `isPowerOfTwo(``int` `n) ` `{ ` `   ``if``(n==0) ` `   ``return` `false``; ` ` `  `   ``return` `(``ceil``(log2(n)) == ``floor``(log2(n))); ` `} ` ` `  `// Driver program ` `int` `main() ` `{ ` `    ``isPowerOfTwo(31)? ``printf``(``"Yes\n"``): ``printf``(``"No\n"``); ` `    ``isPowerOfTwo(64)? ``printf``(``"Yes\n"``): ``printf``(``"No\n"``); ` `    ``return` `0; ` `} ` ` `  `// This code is contributed by bibhudhendra `

## Java

 `// Java Program to find whether a ` `// no is power of two ` `class` `GFG ` `{ ` `/* Function to check if x is power of 2*/` `static` `boolean` `isPowerOfTwo(``int` `n) ` `{ ` `    ``if``(n==``0``) ` `    ``return` `false``; ` ` `  `return` `(``int``)(Math.ceil((Math.log(n) / Math.log(``2``)))) ==  ` `       ``(``int``)(Math.floor(((Math.log(n) / Math.log(``2``))))); ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``if``(isPowerOfTwo(``31``)) ` `    ``System.out.println(``"Yes"``); ` `    ``else` `    ``System.out.println(``"No"``); ` `     `  `    ``if``(isPowerOfTwo(``64``)) ` `    ``System.out.println(``"Yes"``); ` `    ``else` `    ``System.out.println(``"No"``); ` `} ` `} ` ` `  `// This code is contributed by mits `

## Python3

 `# Python3 Program to find  ` `# whether a no is  ` `# power of two ` `import` `math ` ` `  `# Function to check ` `# Log base 2 ` `def` `Log2(x): ` `    ``if` `x ``=``=` `0``: ` `        ``return` `false; ` ` `  `    ``return` `(math.log10(x) ``/`  `            ``math.log10(``2``)); ` ` `  `# Function to check ` `# if x is power of 2 ` `def` `isPowerOfTwo(n): ` `    ``return` `(math.ceil(Log2(n)) ``=``=`  `            ``math.floor(Log2(n))); ` ` `  `# Driver Code ` `if``(isPowerOfTwo(``31``)): ` `    ``print``(``"Yes"``); ` `else``: ` `    ``print``(``"No"``); ` ` `  `if``(isPowerOfTwo(``64``)): ` `    ``print``(``"Yes"``); ` `else``: ` `    ``print``(``"No"``); ` `     `  `# This code is contributed  ` `# by mits `

## C#

 `// C# Program to find whether  ` `// a no is power of two ` `using` `System; ` ` `  `class` `GFG ` `{ ` `     `  `/* Function to check if  ` `   ``x is power of 2*/` `static` `bool` `isPowerOfTwo(``int` `n) ` `{ ` ` `  `    ``if``(n==0) ` `     ``return` `false``; ` ` `  `    ``return` `(``int``)(Math.Ceiling((Math.Log(n) /  ` `                               ``Math.Log(2)))) == ` `           ``(``int``)(Math.Floor(((Math.Log(n) /  ` `                              ``Math.Log(2))))); ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main() ` `{ ` `    ``if``(isPowerOfTwo(31)) ` `        ``Console.WriteLine(``"Yes"``); ` `    ``else` `        ``Console.WriteLine(``"No"``); ` `     `  `    ``if``(isPowerOfTwo(64)) ` `        ``Console.WriteLine(``"Yes"``); ` `    ``else` `        ``Console.WriteLine(``"No"``); ` `} ` `} ` ` `  `// This code is contributed  ` `// by Akanksha Rai(Abby_akku) `

## PHP

 ` `

Output:

```No
Yes```

2. Another solution is to keep dividing the number by two, i.e, do n = n/2 iteratively. In any iteration, if n%2 becomes non-zero and n is not 1 then n is not a power of 2. If n becomes 1 then it is a power of 2.

## C++

 `#include ` `using` `namespace` `std; ` ` `  `/* Function to check if x is power of 2*/` `bool` `isPowerOfTwo(``int` `n)  ` `{  ` `    ``if` `(n == 0)  ` `        ``return` `0;  ` `    ``while` `(n != 1)  ` `    ``{  ` `        ``if` `(n%2 != 0)  ` `            ``return` `0;  ` `        ``n = n/2;  ` `    ``}  ` `    ``return` `1;  ` `}  ` ` `  `/*Driver code*/` `int` `main()  ` `{  ` `    ``isPowerOfTwo(31)? cout<<``"Yes\n"``: cout<<``"No\n"``;  ` `    ``isPowerOfTwo(64)? cout<<``"Yes\n"``: cout<<``"No\n"``;  ` `    ``return` `0;  ` `}  ` ` `  `// This code is contributed by rathbhupendra `

## C

 `#include ` `#include ` ` `  `/* Function to check if x is power of 2*/` `bool` `isPowerOfTwo(``int` `n) ` `{ ` `  ``if` `(n == 0) ` `    ``return` `0; ` `  ``while` `(n != 1) ` `  ``{ ` `      ``if` `(n%2 != 0) ` `         ``return` `0; ` `      ``n = n/2; ` `  ``} ` `  ``return` `1; ` `} ` ` `  `/*Driver program to test above function*/` `int` `main() ` `{ ` `  ``isPowerOfTwo(31)? ``printf``(``"Yes\n"``): ``printf``(``"No\n"``); ` `  ``isPowerOfTwo(64)? ``printf``(``"Yes\n"``): ``printf``(``"No\n"``); ` `  ``return` `0; ` `} `

## Java

 `// Java program to find whether ` `// a no is power of two ` `import` `java.io.*; ` ` `  `class` `GFG { ` ` `  `    ``// Function to check if  ` `    ``// x is power of 2 ` `    ``static` `boolean` `isPowerOfTwo(``int` `n) ` `    ``{ ` `        ``if` `(n == ``0``) ` `            ``return` `false``; ` `         `  `        ``while` `(n != ``1``) ` `        ``{ ` `            ``if` `(n % ``2` `!= ``0``) ` `                ``return` `false``; ` `            ``n = n / ``2``; ` `        ``} ` `        ``return` `true``; ` `    ``} ` ` `  `    ``// Driver program  ` `    ``public` `static` `void` `main(String args[]) ` `    ``{ ` `        ``if` `(isPowerOfTwo(``31``)) ` `            ``System.out.println(``"Yes"``); ` `        ``else` `            ``System.out.println(``"No"``); ` ` `  `        ``if` `(isPowerOfTwo(``64``)) ` `            ``System.out.println(``"Yes"``); ` `        ``else` `            ``System.out.println(``"No"``); ` `    ``} ` `} ` ` `  `// This code is contributed by Nikita tiwari. `

## Python3

 `# Python program to check if given ` `# number is power of 2 or not  ` ` `  `# Function to check if x is power of 2 ` `def` `isPowerOfTwo(n): ` `    ``if` `(n ``=``=` `0``): ` `        ``return` `False` `    ``while` `(n !``=` `1``): ` `            ``if` `(n ``%` `2` `!``=` `0``): ` `                ``return` `False` `            ``n ``=` `n ``/``/` `2` `             `  `    ``return` `True` ` `  `# Driver code ` `if``(isPowerOfTwo(``31``)): ` `    ``print``(``'Yes'``) ` `else``: ` `    ``print``(``'No'``) ` `if``(isPowerOfTwo(``64``)): ` `    ``print``(``'Yes'``) ` `else``: ` `    ``print``(``'No'``) ` ` `  `# This code is contributed by Danish Raza `

## C#

 `// C# program to find whether ` `// a no is power of two ` `using` `System; ` ` `  `class` `GFG ` `{ ` `     `  `    ``// Function to check if  ` `    ``// x is power of 2 ` `    ``static` `bool` `isPowerOfTwo(``int` `n) ` `    ``{ ` `        ``if` `(n == 0) ` `            ``return` `false``; ` `         `  `        ``while` `(n != 1) { ` `            ``if` `(n % 2 != 0) ` `                ``return` `false``; ` `                 `  `            ``n = n / 2; ` `        ``} ` `        ``return` `true``; ` `    ``} ` ` `  `    ``// Driver program  ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``Console.WriteLine(isPowerOfTwo(31) ? ``"Yes"` `: ``"No"``); ` `        ``Console.WriteLine(isPowerOfTwo(64) ? ``"Yes"` `: ``"No"``); ` ` `  `    ``} ` `} ` ` `  `// This code is contributed by Sam007 `

## PHP

 ` `

Output :

```No
Yes```

3. All power of two numbers have only one bit set. So count the no. of set bits and if you get 1 then number is a power of 2. Please see Count set bits in an integer for counting set bits.

4. If we subtract a power of 2 numbers by 1 then all unset bits after the only set bit become set; and the set bit become unset.

For example for 4 ( 100) and 16(10000), we get following after subtracting 1
3 –> 011
15 –> 01111

So, if a number n is a power of 2 then bitwise & of n and n-1 will be zero. We can say n is a power of 2 or not based on value of n&(n-1). The expression n&(n-1) will not work when n is 0. To handle this case also, our expression will become n& (!n&(n-1)) (thanks to https://www.geeksforgeeks.org/program-to-find-whether-a-no-is-power-of-two/Mohammad for adding this case).
Below is the implementation of this method.

## C++

 `#include ` `using` `namespace` `std; ` `#define bool int  ` ` `  `/* Function to check if x is power of 2*/` `bool` `isPowerOfTwo (``int` `x)  ` `{  ` `    ``/* First x in the below expression is for the case when x is 0 */` `    ``return` `x && (!(x&(x-1)));  ` `}  ` ` `  `/*Driver code*/` `int` `main()  ` `{  ` `    ``isPowerOfTwo(31)? cout<<``"Yes\n"``: cout<<``"No\n"``;  ` `    ``isPowerOfTwo(64)? cout<<``"Yes\n"``: cout<<``"No\n"``;  ` `    ``return` `0;  ` `}  ` ` `  `// This code is contributed by rathbhupendra `

## C

 `#include ` `#define bool int ` ` `  `/* Function to check if x is power of 2*/` `bool` `isPowerOfTwo (``int` `x) ` `{ ` `  ``/* First x in the below expression is for the case when x is 0 */` `  ``return` `x && (!(x&(x-1))); ` `} ` ` `  `/*Driver program to test above function*/` `int` `main() ` `{ ` `  ``isPowerOfTwo(31)? ``printf``(``"Yes\n"``): ``printf``(``"No\n"``); ` `  ``isPowerOfTwo(64)? ``printf``(``"Yes\n"``): ``printf``(``"No\n"``); ` `  ``return` `0; ` `} `

## Java

 `// Java program to efficiently  ` `// check for power for 2 ` ` `  `class` `Test ` `{ ` `    ``/* Method to check if x is power of 2*/` `    ``static` `boolean` `isPowerOfTwo (``int` `x) ` `    ``{ ` `      ``/* First x in the below expression is  ` `        ``for the case when x is 0 */` `        ``return` `x!=``0` `&& ((x&(x-``1``)) == ``0``); ` `         `  `    ``} ` `     `  `    ``// Driver method ` `    ``public` `static` `void` `main(String[] args)  ` `    ``{ ` `         ``System.out.println(isPowerOfTwo(``31``) ? ``"Yes"` `: ``"No"``); ` `         ``System.out.println(isPowerOfTwo(``64``) ? ``"Yes"` `: ``"No"``); ` `         `  `    ``} ` `} ` `// This program is contributed by Gaurav Miglani     `

## Python

 `# Python program to check if given ` `# number is power of 2 or not  ` ` `  `# Function to check if x is power of 2 ` `def` `isPowerOfTwo (x): ` ` `  `    ``# First x in the below expression  ` `    ``# is for the case when x is 0  ` `    ``return` `(x ``and` `(``not``(x & (x ``-` `1``))) ) ` ` `  `# Driver code ` `if``(isPowerOfTwo(``31``)): ` `    ``print``(``'Yes'``) ` `else``: ` `    ``print``(``'No'``) ` `     `  `if``(isPowerOfTwo(``64``)): ` `    ``print``(``'Yes'``) ` `else``: ` `    ``print``(``'No'``) ` `     `  `# This code is contributed by Danish Raza     `

## C#

 `// C# program to efficiently  ` `// check for power for 2 ` `using` `System; ` ` `  `class` `GFG ` `{ ` `    ``// Method to check if x is power of 2 ` `    ``static` `bool` `isPowerOfTwo (``int` `x) ` `    ``{ ` `        ``// First x in the below expression   ` `        ``// is for the case when x is 0  ` `        ``return` `x != 0 && ((x & (x - 1)) == 0); ` `         `  `    ``} ` `     `  `    ``// Driver method ` `    ``public` `static` `void` `Main()  ` `    ``{ ` `        ``Console.WriteLine(isPowerOfTwo(31) ? ``"Yes"` `: ``"No"``); ` `        ``Console.WriteLine(isPowerOfTwo(64) ? ``"Yes"` `: ``"No"``); ` `         `  `    ``} ` `} ` ` `  `// This code is contributed by Sam007 `

## PHP

 ` `

Output :

```No
Yes```