В книге Брайана Кернигана и Денниса Ритчи "Язык программирования С" сказано: "К целым числам применимы модификаторы short и long: short int sb; long int counter; Слово int в таких объявлениях можно опустить, что обычно и делается. Целью введения этих модификаторов было разграничить длины двух типов целых чисел для практических потребностей. Обычно int имеет стандартную для той или иной системы длину. Так short часто имеет размер 16 бит, long - 32 бита, а int - или 16, или 32. Компилятору разрешено самостоятельно выбирать размер в соответствии с характеристиками аппаратуры и следующими ограничениями: числа типа short и int должны иметь длину не менее 16 бит, а long - не менее 32 бит; тип short должен быть не длиннее int, а int - не длиннее long".
Вопрос следующий - int реализован как тип данных, который имеет два модификатора или есть два типа данных (short и long) и при присваивании переменной типа int компилятор сам решает, будет ли это переменная short, либо long, а int, в таком случает является в некотором роде абстракцией?
Для правильного вопроса надо знать половину ответа
Есть три типа данных - short int, int и long int.
Компилятор не решает, какого типа будет переменная. Программист должен объявить это явно.
Компилятор решает, какого размера будет переменная каждого типа.
Просто в целях экономии места на экране и трудозатрат на кнопкотык, некто придумал правило, делающиее такие вещи эквивалентными:
shot int a === short a
long int a === long a
При написании программ, для которых важно, сколько именно места занимает переменная, или сколько разрядов она предоставляет для вычислений, лучше не заниматься игрой "угадай размер типа по компилятору и модификатору", а просто использовать типы с фиксированными характеристиками:
int - это как раз вполне конкретный, можно сказать, "базовый" целый тип. Стандарт его определяет как "естественный" для данной платформы. Дальше, для нужд алгоритмов, вводятся целые типы не больше и не меньше int. По умолчанию, все константы приводятся к int и в выражениях в которых нет переменных больше int переменные приводятся к int.