题目:
解释:
判断一个数是不是4的幂,这里用到一个知识就是
1.判断一个数是不是2的幂用n&(n-1)==0
,一个数是4的幂的前提是它是2的幂
2.4
的次幂-1之后是3的倍数:
3.4
的次幂的二进制表示中只有一个1
,剩下的全是0
,而且唯一的1
右边有偶数个0
,所以(num>>1)与0x5555555555
&之后为1
,0x55555555=1010101010101010101010101010101
。
python代码
from math import log10
class Solution(object):
def isPowerOfFour(self, num):
"""
:type num: int
:rtype: bool
"""
if num<=0:
return False
return num&(num-1)==0 and (num>>1)&(0x55555555)==0;
c++代码:
class Solution {
public:
bool isPowerOfFour(int num) {
if (num<=0)
return false;
return (num&(num-1))==0 & ((num>>1)&(0x55555555))==0;
}
};
总结:
遇到位运算和逻辑运算的时候注意运算符的优先级问题。