美文网首页
判断一个数是否是2的幂次

判断一个数是否是2的幂次

作者: 阿狸404 | 来源:发表于2018-02-27 15:21 被阅读24次

    题目:判断给定的一个数是否是2的幂次。

    package com.wang.suan;
    /**
     * 判断给定的数是否是2的幂次
     * @author wxe
     * @since 0.0.1
     */
    public class CheckPower {
    
        public static void main(String[] args) {
            System.out.println(checkPowerOf2(4));
        }
        
        public static boolean checkPowerOf2(int num){
            if (num <= 0) {
                return false;
            }
            
            return (num & (num-1)) == 0;
        }
    
    }
    
    

    这么简单又高效的算法,就要归功于n & (n-1)的妙用了。
    基本原理

       n&(n-1)作用:将n的二进制表示中的最低位为1的改为0,先看一个简单的例子:
    
      n = 10100(二进制),则(n-1) = 10011 ==》n&(n-1) = 10000
    
     可以看到原本最低位为1的那位变为0。
    

    弄清楚了它的原理,那么到底能用在哪些方面呢?

    1. 求某一个数的二进制表示中1的个数
    while (n >0 ) {
          count ++;
          n &= (n-1);
    }
    
    1. 判断一个数是否是2的幂
    n > 0 && ((n & (n - 1)) == 0 )
    

    相关文章

      网友评论

          本文标题:判断一个数是否是2的幂次

          本文链接:https://www.haomeiwen.com/subject/qqcmxftx.html