题目描述:给定一个正整数,实现一个函数来判断它是否是2的幂次方。
输入:正整数
输出:True或False
示例:
输入: 16
输出: True
输入: 218
输出: False
思路:如果一个数是2的幂次方,那么它的二进制表示中只有一个1,并且这个1出现在最高位上。例如,4的二进制表示为100,8的二进制表示为1000,16的二进制表示为10000,依此类推。因此,我们可以使用位运算,根据上述规律来判断一个数是否是2的幂次方。
代码实现:
```python
def isPowerOfTwo(n: int) > bool:
if n <= 0:
return False
return n & (n1) == 0 and n & 0xAAAAAAAA == 0
```
解释:
1. 首先判断n是否小于等于0,如果是,直接返回False。
2. 使用位运算 n & (n1) == 0 来判断是否只有一个1。
3. 使用位运算 n & 0xAAAAAAAA == 0 来判断这个1是否出现在最高位上。0xAAAAAAAA 是一个二进制数,它的奇数位上都是1,偶数位上都是0,例如:1010 1010 1010 1010。由此可以看出,如果n的二进制表示中这个1出现在偶数位上,那么它与0xAAAAAAAA相与的结果就不是0。
测试代码:
```python
assert isPowerOfTwo(16) == True
assert isPowerOfTwo(218) == False
assert isPowerOfTwo(0) == False
assert isPowerOfTwo(16) == False
```
指导建议:这是一道简单的位运算题目,主要考察对位运算的掌握。对于初学者来说,可以通过画出数字的二进制表示来更好地理解这个算法。在实际应用中,位运算还有很多值得深入学习的应用场景,例如位掩码、位移操作等。因此,建议大家多花时间学习位运算,在实际编程中运用得更娴熟。