`
粟谷_sugu
  • 浏览: 25466 次
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多
    看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;
    }

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

相关推荐

Global site tag (gtag.js) - Google Analytics