符号なし32ビット整数を格納するために必要なビット数(1..32)を返すCマクロを作成する必要があるとします。(結果はceiling(log2(n))に等しくなります。
関数ではなく、コンパイル時の計算マクロとして必要です。
私はそれをできた
#define NBITS(n) ((n)&(1<<31)?32:(n)&(1<<30)?31:...
動作しますが、かなり長いです。(ここでは速度は重要ではありません。計算はコンパイル時に行われます)。
このマクロを書くためのより短い方法はありますか?最短?