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