> For the complete documentation index, see [llms.txt](https://kerasnoone.gitbook.io/garnet/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kerasnoone.gitbook.io/garnet/suan-fa/wei-yun-suan/3424-de-mi.md).

# \[342]\[简单] 4的幂

## 题目描述

[342. 4的幂](https://leetcode-cn.com/problems/power-of-four/)

给定一个整数，写一个函数来判断它是否是 4 的幂次方。如果是，返回 true ；否则，返回 false 。

整数 n 是 4 的幂次方需满足：存在整数 x 使得 n == 4x

示例 1：

```
输入：n = 16
输出：true
```

示例 2：

```
输入：n = 5
输出：false
```

示例 3：

```
输入：n = 1
输出：true
```

提示：

* -231 <= n <= 231 - 1

进阶：

你能不使用循环或者递归来完成本题吗？

## 解题思路

也是用位运算的思路解题.

如果n是4的幂, 则一定也是2的幂. 因此可以先判断是否是2的幂, 判断的方法参考[\[231\]\[简单\] 2的幂](/garnet/suan-fa/wei-yun-suan/2312-de-mi.md).

如果是2的幂, 则二进制角度下, n只能有1位1. 且又要是4的幂, 4的二进制是100, 4的平方的二进制是10000. 因此1一定要出现在奇数位上. 因此我们可以创建一个mask, 偶数位为1, 奇数位为0, 这样n与这个mask相与时, 如果n是4的幂, 则结果一定为0.

由于n是一个32位的整数, mask就可以记为:

$$
(10101010101010101010101010101010)*2 = (AAAAAAAA)*{16}
$$

因此先判断是否只有一个1, 在判读1是否在奇数位上. 代码为:

```python
class Solution:
    def isPowerOfFour(self, n: int) -> bool:
        return n > 0 and n & (n - 1) == 0 and n & 0xAAAAAAAA == 0
```
