Там какой-либо путь состоит в том, чтобы вычислить ширину целого типа во время компиляции?

Размер целого типа (или любой тип) в единицах char/ байты легко вычисляется как sizeof(type). Общая идиома должна умножиться CHAR_BIT для нахождения числа битов занятым типом, но на реализациях с дополнением битов, это не будет равно ширине в битах значения. Хуже все же, код как:

x>>CHAR_BIT*sizeof(type)-1

может на самом деле иметь неопределенное поведение если CHAR_BIT*sizeof(type) больше, чем фактическая ширина type.

Для простоты давайте предположим, что наши типы не подписаны. Затем ширина type ceil(log2((type)-1). Там какой-либо путь состоит в том, чтобы вычислить это значение как константное выражение?

14
задан R.. 18 October 2010 в 07:30
поделиться