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.

questionAnswers(3)

yourAnswerToTheQuestion