次の 2 の累乗に切り上げる

Bit Twiddling Hacks をチェックしてください。 2 を底とする対数を取得し、それに 1 を追加する必要があります。 32 ビット値の例:

他の幅への拡張は明らかです。


next = pow(2, ceil(log(x)/log(2)));

これは、x を取得するために 2 をレイズする数を見つけることによって機能します (数の対数を取り、目的の基数の対数で割ります。詳細については、ウィキペディアを参照してください)。それを ceil で切り上げて、最も近い整数のべき乗を取得します。

これは、他の場所でリンクされているビット単位のメソッドよりも汎用的な (つまり遅い!) メソッドですが、数学を知っておくとよいでしょう?


これもうまくいくと思います:

int power = 1;
while(power < x)
    power*=2;

そして答えは power です .