一、题目
1、审题
2、分析
判断给出的数值是否为 2 的幂次方。
二、解答
1、思路
方法一、
采用 n & (n-1)每次消掉 n 最右边一个 1 的特点。而 2 的幂次方的二进制形式都是只包含一个 1. eg:2、4、8、16、、、
// n & (n-1)每次消掉 n 最右边一个 1 public boolean isPowerOfTwo(int n) { return n > 0 && (n & (n-1)) == 0; }
方法二、
正整数中,2 的幂次方最大为 2 << 30。 判断 n 是否能被 2<< 30 整除即可。
public boolean isPowerOfTwo2(int n) { int max = 1 << 30; return n > 0 && (max % n == 0); }