C · Avançado · Português · Técnico
promoção de inteiros
Regra pela qual tipos menores que int, como char e short, são convertidos para int antes de operações aritméticas. O resultado de a + b com dois chars é int, não char.
Onde usar
Explica surpresas como ~(unsigned char)0 virar um valor negativo e comparações inesperadas ao mexer em bytes. Em código de protocolos, converta de volta explicitamente.
Em código
unsigned char a = 200, b = 100;
int soma = a + b; // 300, sem truncar
unsigned char c = a + b; // 44
printf("%d %d\n", soma, c);Exemplos
Por causa da promoção de inteiros, a soma de dois bytes não estoura em 255.
Essa comparação falha por causa da promoção de inteiros de um unsigned char.
Cuidado
Deslocar um uint8_t por muitos bits sem converter antes: ele vira int e o deslocamento pode estourar o bit de sinal.
Sinônimos
integer promotion