增加一个 判断一个数是否为2的整数次幂的函数
时间: 2023-09-16 14:16:03 浏览: 53
判断一个数是否为2的整数次幂,可以通过位运算来实现。如果一个数是2的整数次幂,那么它的二进制表示中只有一个1,其余位都为0。因此,我们可以通过将这个数减去1,然后与原数做与运算,如果结果为0,则这个数是2的整数次幂,否则不是。
下面是一个简单的函数实现:
```c
int is_power_of_two(int n) {
return (n > 0) && ((n & (n - 1)) == 0);
}
```
这个函数首先判断n是否大于0,然后将n减去1,与原数做与运算,判断结果是否为0。如果结果为0,说明n是2的整数次幂,返回1;否则返回0。
需要注意的是,这个函数只能判断正整数是否为2的整数次幂。如果需要判断负数是否为2的整数次幂,需要进行额外的处理。
相关问题
python编写一个函数,判断某整数是否为 2 的整数次幂。
如果一个整数是2的整数次幂,那么它的二进制表示中只有最高位是1,其余位都是0。因此,可以通过将该整数与该整数减1相与,判断结果是否为0来判断该整数是否为2的整数次幂。
具体实现代码如下:
```python
def is_power_of_two(n):
return n > 0 and (n & (n - 1)) == 0
```
其中,`n > 0`表示排除负整数和0,`(n & (n - 1)) == 0`表示将n与n-1相与,如果结果为0,则说明n是2的整数次幂。
另外,还可以使用位运算的技巧,判断一个整数的二进制表示中是否只有一个1,如果是,则说明它是2的整数次幂。
具体实现代码如下:
```python
def is_power_of_two(n):
return n > 0 and (n & (n - 1)) == 0 and (n & 0x55555555) != 0
```
其中,`(n & 0x55555555) != 0`表示判断n的二进制表示中是否只有一个1,0x55555555是16进制表示的1431655765,其二进制表示为01010101010101010101010101010101,用于判断一个32位整数的二进制表示中是否只有一个1。
写一个函数来判断它是否是 3 的幂次方
可以使用循环或者递归来判断一个数是否是 3 的幂次方。以下是一个使用循环的函数实现:
```c
int isPowerOfThree(int n) {
if (n <= ) {
return ;
}
while (n % 3 == ) {
n /= 3;
}
return n == 1;
}
```
该函数首先判断输入的数是否小于等于 ,如果是则直接返回 。然后使用循环不断将输入的数除以 3,直到无法整除为止。如果最终得到的数是 1,则说明输入的数是 3 的幂次方,返回 1;否则返回 。
注意,该函数只适用于正整数,如果输入的是负数或者 ,则直接返回 。