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