1つの数が2のn次方であるかどうかを判断し、べき乗指数--ループを使用しない

1569 ワード

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