Selección de tipo para valores numéricos literales en C

Me pregunto sobre esto: cuando intento asignar un valor entero a unint variable (compilador de 16 bits, 2 bytes para enteros) digamos:

int a;

a=40000;

Eso no se puede representar con el rango del tipo que se truncará. Pero lo que estoy viendo es que el valor resultante ena es el patrón de bits para -25000 (o algún número cercano) lo que significa que la representación binaria que el compilador elige para el decimal 40000 era una representación entera sin signo. Y eso plantea mi pregunta: ¿cómo elige el compilador el tipo para esta expresión literal?

Supongo que utiliza el tipo capaz de manejar el valor con menos espacio de almacenamiento necesario.

Respuestas a la pregunta(3)

Su respuesta a la pregunta