判断一个数是不是2的乘方

180 阅读1分钟
  • 一般方法
    public boolean powerOf2(int n) {
        int k = 1;
        while (k <= n) {
            if (k == n) {
                return true;
            }
            // k = k*2;
            k = k << 1;
        }
        return false;
    }
  • 更高效的方法:
    /**
     * 2的二进制表示为0010B,4的二进制为0100B
     * 若是对其减1,二进制则变为01B,0011B
     * 再使用&进行位操作 n&(n-1)=0
     */
    public boolean powerOf2_2(int n) {
        if (0 == (n&(n-1)) && n >= 1) {
            return true;
        }
        return false;
    }