欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-02-02 08:36:04
...
    看netty源码的时候,看到有一个关于如何判断一个int数值是否为2的幂次方的算法,感觉蛮有意思的,所以简单记录一下。
    先说一下通常判断一个数是否为2的幂次方我会怎么做, 随便写一个最暴力的
public static boolean isPowerOf2(int n) {
        if (n < 1)
            return false;
        int i = 1;
        while (i <= n) {
            if (i == n)
                return true;
            i <<= 1;

        }
        return false;
    }

明显看出这种方法不优雅,现在介绍netty中看到的是怎么做的
    private static boolean isPowerOfTwo(int val) {
        return (val & -val) == val;
    }

提一下在计算机中负数的二进制采用正数的补码,其他具体为什么感觉也不需要追溯了,第二个方法明显优雅多了