• 快速判断一个数是否是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

  • 相关阅读:
    HIVE入门
    Mapreduce中的reduce数量和分区控制
    MapReduce入门2-流量监控
    MapReduce入门
    树莓派保持网络连接shell脚本
    手动转屏
    Shell教程
    6个基本screen命令
    node.js 开发博客系统
    iap 应用内购买相关的解释
  • 原文地址:https://www.cnblogs.com/tianzhijiexian/p/4254962.html
Copyright © 2020-2023  润新知