[LeetCode]231. Power of Two判断是不是2\3\4的幂

/*
        用位操作,乘2相当于左移1位,所以2的幂只有最高位是1
        所以问题就是判断你是不是只有最高位是1,怎判断呢
        这些数-1后形成的数,除了最高位,后边都是1,如果n&n-1就可以判断了
        如果是2的幂,&的结果是全0
         */
        if (n<=0) return false;
        return ((n&(n-1))==0);

划重点:

一个数*2,出相当于左移一位

2.判断是不是3的幂,没啥用的一道题

 

public boolean isPowerOfThree(int n) {
        /*
        不能用循环和递归    感觉不看答案是做不出来
        3的幂都可以被int中最大的3的倍数整数
         */
        return n > 0 && (1162261467 % n) == 0;
    }

 

3.判断是不是4的幂

重点就是记住:0x55555555,8个5这个16进制的二进制是:奇数位1,偶数位0,用于提取出一个数的奇数位

/*
    2的幂中有些不是4的幂,哪些呢?多写几个不难发现
    2的幂特征是:最高位是1,后边的是0
    而4的幂除了上边的特征,还有最高位必须是从后边数第奇数位
    比如8的二进制是1000,从后边数第4位是最高位,不是4的幂,同理还有32
    判断最高位是不是偶数位,用0x55555555&上就行,因为这个数的二进制表示
    是奇数位为1,偶数位为0
     */
    public boolean isPowerOfFour(int num) {
        return num>0&(num&(num-1))==0&(num&0x55555555)!=0;
    }

 

posted @ 2018-02-27 13:00  stAr_1  阅读(140)  评论(0编辑  收藏  举报