leetcode链接:231. Power of Two
Given an integer, write a function to determine if it is a power of two.
出错样例:1Input: -16 Expected: false // 就是没有考虑负数。
C++实现:
|
|
上述一个常规的做法:连续除。
此外,我们考虑到2的幂的二进制只有最高位为1,其余都为0,此时利用这个特点可以写出如下的代码:12345678910class Solution {public: bool isPowerOfTwo(int n) { if(n <= 0) return false; return (n &(n-1) )== 0; //或者一句话表示,如下: //return n>0 && (n &(n-1) )== 0; }};
n & (n-1)==0
会被当作:n & ((n-1)==0)
,故需要加上括号写为:(n &(n-1) )== 0
。
例如:8的二进制1000
,7的二进制0111
,取并集为0。
同类题: