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

288 阅读1分钟

今天读netty源码,发现一个判断数是否为2的幂次方的方法,这里分享一下给大家

private static boolean isPowerOfTwo(int val) {
        return (val & -val) == val;
    }

举例:

8的二进制为1000,而-8的二进制是8的反码 +10111+1=1000

仔细想想,其实任何 2 的幂次方都是最高位为1,其他位置为0。易知,正反 2 的幂次方的数的二进制都相同。