2の累乗ということは、ビット演算的には1が一つだけの状態です。
2の累乗の場合、
-1すると繰り下がって下位ビットが全部1になるため、AND演算すると0になります。
2の累乗以外なら、
-1しても桁下がり発生しないため、AND演算にすれば1以上になります。
ただ0はアンダーフローによりうまくいかないので、最初に弾いています。
2の累乗ということは、ビット演算的には1が一つだけの状態です。
2の累乗の場合、
-1すると繰り下がって下位ビットが全部1になるため、AND演算すると0になります。
2の累乗以外なら、
-1しても桁下がり発生しないため、AND演算にすれば1以上になります。
ただ0はアンダーフローによりうまくいかないので、最初に弾いています。