2 的幂从小到大有 1,2,4,8...
观察他们的二进制:1 = 1,2 = 10,4 = 100,8 = 1000...... 我们发现 2 的幂基本上都满足这样一个规律就是,这个数的二进制数都是 1 开头,后面 m 个 0
我们再看一下每个 2 的幂次方数减 1:0 = 0,1 = 1,3 = 011,7 = 0111...... 我们发现正好每一位都是与 2 的幂的二进制相反,于是我们可以将 n 和 n-1 相 &,得到的结果如果是 0,就表示 n 是 2 的幂,如果不是 0,他就不是 2 的幂
- class Solution {
- public boolean isPowerOfTwo(int n) {
- if(n <= 0)
- return false;
- return ((n & (n - 1)) == 0);
- }
- }