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

2018-02-27  本文已影响24人  阿狸404

题目:判断给定的一个数是否是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 )
上一篇 下一篇

猜你喜欢

热点阅读