1、题目
Given an integer, write a function to determine if it is a power of two.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
Subscribe to see which companies asked this question.
2、分析
比如我们发现1、2、4、8、16转化成二进制为
1、10、100、1000、10000、
我们发现第一位是1后面都是0
思路1、
我们先把这个数字和1进行&操作得到一个数temp,然后原数右移动,然后把右移的数字再和1进行&操作,然后和temp相加,如果都是1000,temp之元数不是1之前都是0,最后一次右移动,就成了1,temp == 1,就可以了返回是
思路2、
我们原素减去-1和元素&操作,如果结果为0就说明是。
3、代码实现
C++代码实现1
class Solution {
public:bool isPowerOfTwo(int n) {int temp = 0;while (n > 0) {temp += (n & 1);n >>= 1;} return temp == 1;}
};
C++代码实现2
class Solution {
public:bool isPowerOfTwo(int n) {return (n > 0) && !(n & (n - 1));}
};
java代码实现2
public class Solution {public boolean isPowerOfTwo(int n) {return (n > 0) && ((n & (n - 1)) == 0 ? true : false);}
}