算法练习(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;
    }

 

posted @ 2021-03-27 15:52  菩提树下的杨过  阅读(145)  评论(0编辑  收藏  举报