Seleção de tipo para valores numéricos literais em C
Eu estou querendo saber sobre isso: quando eu tento atribuir um valor inteiro a umint
variável (compilador de 16 bits, 2 bytes para inteiros) digamos:
int a;
a=40000;
que não pode ser representado com o intervalo do tipo, ele será truncado. Mas o que estou vendo é que o valor resultantea é o padrão de bits para -25000 (ou algum número próximo), o que significa que a representação binária que o compilador escolhe para o decimal 40000 era uma representação de inteiro sem sinal. E isso levanta minha dúvida: como o compilador escolhe o tipo para essa expressão literal?
Eu estou supondo que ele usa o tipo capaz de manipular o valor com menos espaço de armazenamento necessário.