一、题目
二、思路
要是2的幂,可以回想二进制数中,什么样的二进制数对应的十进制是2的幂呢,就是在二进制数中,只有一个1,其余都是0。所以我们只需要判断给定的数的二进制数,如果只有一个1则返回true了。
位运算的技巧:
然后n & (-n)运算后,结果的高位全部为0,最低位的1和后面的0都没有变化,因此我们可以用n > 0 && (n & -n) == n判断这题。
三、代码
class Solution { public: bool isPowerOfTwo(int n) { //return n > 0 && (n & (n - 1)) == 0; //法二 return n > 0 && (n & -n) == n; } };