2の累乗か判定する

category: C++ | 2017-06-20

2の累乗ということは、ビット演算的には1が一つだけの状態です。

2の累乗の場合、
-1すると繰り下がって下位ビットが全部1になるため、AND演算すると0になります。

2の累乗以外なら、
-1しても桁下がり発生しないため、AND演算にすれば1以上になります。

ただ0はアンダーフローによりうまくいかないので、最初に弾いています。