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