一. 题目描述
Given an integer, write a function to determine if it is a power of two.
二.题目分析
该题要求简单,给定一个整数,判断其是不是2
的整数次幂,这道题的解题关键是找到一个规律:如果一个数字是2
的整数次幂,若将该数写为二进制数,这个二进制数中有且仅有一位为1
,其余均为0
。根据这一性质,不难给出以下给出两种解决方法。
三.示例代码
// 将n不停右移,比较二进制数中1出现的个数,count = 1时判定为ture
bool isPowerOfTwo(int n) {
int count = 0;
while (n > 0)
{
count+=(n&0x01);
n>>=1;
}
if(sum==1)
return true;
else
return false;
}
以下方法同样利用了一个2
的整数次幂的二进制写法中有且仅有一位为1的性质。假设该数为n,根据这一性质,则(n - 1)
必然是将n的最高位1
置0
,然后其余二进制位均置1
,当且仅当这种情况下,有(n&(n-1)) == 0
,一个例子:
n = 8 -> 1000
n - 1 = 7 -> 0111
则有:1000 & 0111 = 0000
class Solution {
public:
bool isPowerOfTwo(int n) {
return (n>0) && (!(n&(n-1)));
}
};
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-23 22:01:26