Regras implícitas de promoção de tipo
Esta postagem deve ser usada como uma FAQ sobre promoção de número inteiro implícito em C, especialmente promoção implícita causada pelas conversões aritméticas comuns e / ou promoções de número inteiro.
Exemplo 1)
Por que isso fornece um número inteiro grande e estranho e não 255?
unsigned char x = 0;
unsigned char y = 1;
printf("%u\n", x - y);
Exemplo 2)
Por que isso dá "-1 é maior que 0"?
unsigned int a = 1;
signed int b = -2;
if(a + b > 0)
puts("-1 is larger than 0");
Exemplo 3)
Por que alterar o tipo no exemplo acima parashort
corrigir o problema?
unsigned short a = 1;
signed short b = -2;
if(a + b > 0)
puts("-1 is larger than 0"); // will not print
(Esses exemplos foram projetados para um computador de 32 ou 64 bits com 16 bits curtos.)