Wybierz typ literalnych wartości liczbowych w C

Zastanawiam się nad tym: kiedy próbuję przypisać wartość całkowitą doint zmienna (16-bitowy kompilator, 2 bajty dla liczb całkowitych) powiedzmy:

int a;

a=40000;

który nie może być reprezentowany przez zakres typu, zostanie obcięty. Ale to, co widzę, to wynikowa wartość wa jest wzorem bitowym dla -25000 (lub pewnej liczby zamknięcia), co oznacza, że ​​reprezentacja binarna, którą kompilator wybiera dla dziesiętnego 40000, to reprezentacja liczby całkowitej bez znaku. To rodzi moje pytanie: w jaki sposób kompilator wybiera typ dla tego dosłownego wyrażenia?

Zgaduję, że wykorzystuje typ zdolny do obsługi wartości przy mniejszej ilości miejsca potrzebnego do przechowywania.

questionAnswers(3)

yourAnswerToTheQuestion