Existe alguma maneira de calcular a largura de um tipo inteiro no tempo de compilação?
O tamanho de um tipo inteiro (ou qualquer tipo) em unidades dechar
/ bytes é facilmente calculado comosizeof(type)
. Um idioma comum é multiplicar porCHAR_BIT
para encontrar o número de bits ocupados pelo tipo, mas em implementações com bits de preenchimento, isso não será igual aolargura em bits de valor. Pior ainda, código como:
x>>CHAR_BIT*sizeof(type)-1
pode realmente ter um comportamento indefinido seCHAR_BIT*sizeof(type)
é maior que a largura real detype
.
Para simplificar, vamos assumir que nossos tipos não são assinados. Então a largura detype
éceil(log2((type)-1)
. Existe alguma maneira de calcular esse valor como uma expressão constante?