Макрос для вычисления количества битов, необходимых для хранения числа n

Допустим, мне нужно написать макрос C , который возвращает количество битов (1 ..32), необходимого для хранения 32-битного целого числа без знака. (Результат равен потолку (log2 (n)).

Мне он нужен как вычисляемый макрос во время компиляции, а не функция.

Я мог бы сделать

 #define NBITS(n) ((n)&(1<<31)?32:(n)&(1<<30)?31:...

он работает, но довольно длинный. (Скорость здесь не имеет значения, вычисление происходит во время компиляции).

Есть ли более короткий способ написать этот макрос? Самый короткий?

11
задан Brian Tompsett - 汤莱恩 25 March 2016 в 19:26
поделиться