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

题目:判断给定的一个数是否是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 )
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 网站乱码问题我们会经常碰到,大多见于非英文的中文字符或其他字符乱码,而且,这类问题常常是因为编码方式问题,主要原因...
    波段顶底阅读 3,001评论 1 9
  • 翻开我当年的初中课本,开门见山第一篇课文便是一首新诗——《在山的那边》,讲的是一个孩子翻山看海的故事。奇怪,为何一...
    解放村乐队队长阅读 567评论 5 2
  • 回了大殿,月老依旧在纠结:“我是棒打鸳鸯的那种神仙吗?怎么一个两个都好像要将我除之而后快似的,我是月老,不是阎王好...
    那我便再等等吧阅读 1,692评论 0 2
  • 往事如雨 徐 宏 该下的雨已然下过 不知雨背后 是否还藏着那份真情 不愿追回的记忆 让它随雨水渗进泥土 ...
    sunxuhong阅读 366评论 1 1