int a = 4;
if ( (a>0) && (a & (a-1)==0 ){
System.out.print("a is the power of 2");
}
【提示】
1) 2的n次方的二进制只有最高位是1,其余为0
2)-1后最高位向后借位为0,其余为1
【样例】
jdk1.8 ConcurrentHashMap.java 最下面的静态块初始化
sun.misc.Unsafe U = sun.misc.Unsafe.getUnsafe();
Class<?> ak = Node[].class;
ABASE = U.arrayBaseOffset(ak);
int scale = U.arrayIndexScale(ak);
if ((scale & (scale - 1)) != 0)//这里判断2的n次方
throw new Error("data type scale not a power of two");