zoukankan      html  css  js  c++  java
  • 快速判断一个数是否是2的幂次方

    public class Test {
    
        public static void main(String[] args) {
            int num = 10;
            if (0 == (num & (num - 1))) {
                //使用与运算判断一个数是否是2的幂次方  
                System.out.println("success");
            }else {
                System.out.println("error");
            }
            
        }
    }

    解释:

    将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。

            如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零。

           最快速的方法:

          (number & number - 1) == 0

          原因:因为2的N次方换算是二进制为10……0这样的形式(0除外)。与上自己-1的位数,这们得到结果为0。例如。8的二进制为1000;8-1=7,7的二进制为111。两者相与的结果为0。计算如下:
             1000
         & 0111
            -------
            0000

    参考自:

    http://blog.csdn.net/hackbuteer1/article/details/6681157

  • 相关阅读:
    从键盘输入10个数,计算出正数和负数的个数。
    浏览器允许的并发请求资源数 优化
    strict 严格模式
    AMD 和 CMD 的区别
    Canvas
    visual filters 滤镜 ie
    ie 如何判断正在执行的脚本
    async
    富文本编辑器
    检测CSS属性 是否支持
  • 原文地址:https://www.cnblogs.com/tianzhijiexian/p/4254962.html
Copyright © 2011-2022 走看看