Это будет определяться архитектурой, которую вы использовали. На чипе Zilog z80 (обычная встроенная микросхема) они будут одного размера, а на чипсете x86 они могут быть совершенно другого размера. Однако сами размеры являются фиксированными отношениями друг к другу. По существу, short и long не являются типами, но соответствуют типу int. Короткие целые будут на порядок меньше, чем (обычные) int, а длинные целые будут на порядок выше. Допустим, ваш Int ограничен 4 байтами, короткий спецификатор ограничивает его 4 байтами, хотя 2 байта также очень распространены, и длинный классификатор потенциально увеличивает его до 8 байтов, хотя он может быть меньше до 4 байтов. Имейте в виду, что это также зависит от длины слова, поэтому в 32-битной системе вы в любом случае получите максимум 4 байта на целое, делая длину такой же, как и для обычного целого. Таким образом, Short ≤ Int ≤ Long.
Однако, если вы снова увеличите его, вы можете вставить int в следующую ячейку, предоставив вам 8 целых байтов памяти. Это размер слова для 64-битных машин, поэтому им не нужно беспокоиться о таких вещах, а просто использовать одну ячейку для длинных целых, что позволяет им быть на порядок выше стандартных, в то время как длинные длинные целые становятся действительно битовыми.
Что касается выбора, он сводится к тому, о чем, например, Java-программистам не нужно беспокоиться. "Какова ваша архитектура?" Поскольку все зависит от размера слова памяти рассматриваемой машины, вы должны понять это заранее, прежде чем решить, какой использовать. Затем вы выбираете наименьший разумный размер, чтобы сэкономить как можно больше памяти, поскольку эта память будет выделена независимо от того, используете ли вы все биты в ней или нет. Таким образом, вы экономите, где можете, и выбираете шорты, когда можете, и целые, когда не можете, и если вам нужно что-то большее, чем те, которые вы даете обычными; Вы будете удлиняться по мере необходимости, пока не достигнете потолка слова. Тогда вам нужно будет предоставить подпрограммы с большим числом или получить их из библиотеки.
C вполне может быть «портативной сборкой», но вы все равно должны знать ваше оборудование.
<stdint.h>