Размер целочисленного типа (или любого типа) в единицах char/bytes легко вычисляется как sizeof(type). Общая идиома заключается в умножении на CHAR_BIT, чтобы найти количество бит, занятых типом, но при реализации с битами заполнения это не будет равно ширине битов значения. Хуже того, код вроде:
x>>CHAR_BIT*sizeof(type)-1
может иметь поведение undefined, если CHAR_BIT*sizeof(type) больше фактической ширины type.
Для простоты предположим, что наши типы не имеют знака. Тогда ширина type равна ceil(log2((type)-1). Есть ли способ вычислить это значение как постоянное выражение?