题目描述:给定一个正整数,实现一个函数来判断它是否是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

```

指导建议:这是一道简单的位运算题目,主要考察对位运算的掌握。对于初学者来说,可以通过画出数字的二进制表示来更好地理解这个算法。在实际应用中,位运算还有很多值得深入学习的应用场景,例如位掩码、位移操作等。因此,建议大家多花时间学习位运算,在实际编程中运用得更娴熟。

免责声明:本网站部分内容由用户自行上传,若侵犯了您的权益,请联系我们处理,谢谢!

分享:

扫一扫在手机阅读、分享本文

最近发表