Допустим, мне нужно написать макрос C , который возвращает количество бит (1..32), необходимое для хранения 32-разрядного целого числа без знака.(Результат равен потолку (log2 (n)).
Мне он нужен как вычисляемый во время компиляции макрос, а не функция.
Я мог бы сделать
#define NBITS(n) ((n)&(1<<31)?32:(n)&(1<<30)?31:...
этоработает, но довольно долго. (Скорость здесь не имеет значения, вычисления выполняются во время компиляции).
Есть ли более короткий способ написать этот макрос? Кратчайший?