今天读netty源码,发现一个判断数是否为2的幂次方的方法,这里分享一下给大家
private static boolean isPowerOfTwo(int val) {
return (val & -val) == val;
}
举例:
8的二进制为1000,而-8的二进制是8的反码 +1,0111+1=1000。
仔细想想,其实任何 2 的幂次方都是最高位为1,其他位置为0。易知,正反 2 的幂次方的数的二进制都相同。