多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 一. 题目描述 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))); } }; ~~~