算法练习(6)-O(1)时间复杂度判断1个正整数是否为2的幂次方

原数(10进制) 原数(2进制) 原数-1(2进制)
1 1 0
2 10 01
4 100 011
8 1000 0111
16 10000 01111

观察上面的表格,如果1个数是2的幂次方,转换成2进制,必然最高位是1,其它位都是0,同时这个数减1后,所有有效位全是0,利用这个特点,做1次&位运算即可

    boolean isPowerOf2(int a) {
        return (a & (a - 1)) == 0;
    }
作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/yjmyzz/p/14586006.html