1. ホーム
  2. c

[解決済み】次の2の累乗に切り上げる場合

2022-04-04 20:26:43

質問

2の次のべき乗に最も近い数値を返す関数を書きたい。例えば、入力が789の場合、出力は1024になるはずです。ループを使わずに、ビット演算子だけでこれを実現する方法はないでしょうか?

どのように解決するのですか?

を確認します。 ビットいじりハック . 2の底の対数を求め、それに1を足す必要があります。 32bitの値の例。

2の最大累乗に切り上げ

unsigned int v; // compute the next highest power of 2 of 32-bit v

v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;

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