どこかのだれかへ

職業ゲームプログラマ。気になったニュースのピックアップや開発日記などを書いています。

2の累乗かどうかの判定

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

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

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

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