4的幂


4的幂

题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
给定一个整数,写一个函数来判断它是否是 4 的幂次方
如果是,返回 true 否则,返回 false
整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x

示例 1:
输入:n = 16
输出:true

示例 2:
输入:n = 5
输出:false

示例 3:
输入:n = 1
输出:true

解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
思路:
2的幂相当于二进制只有一个为1的数,4的幂也一样,2的幂一次跳一格,4跳两格

代码:
/**
* @param Integer $n
*
* @return Boolean
*/
function isPowerOfFour($n)
{
// $n & $n - 1判断二进制数是否只有一个1
// $n & 0xaaaaaaaa 判断是否只在偶数位存在1
// 0xa 是1010的16进制, 如果奇数位存在1, 则$n & 0xaaaaaaaa不会为0
return $n > 0 && ($n & $n - 1) == 0 && ($n & 0xaaaaaaaa) == 0;
}