判断一个数是不是2的n次方,幂指数--不使用循环

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");

你可能感兴趣的:(计算机)