Нет. Стандарт определяет только минимальные диапазоны для каждого из этих типов. Возможно, int может иметь 16-битный диапазон, но 48-битный заполнитель, доводя его до 64-бит (8 байт, если CHAR_BITS == 8), а long - 32-бит (4 байта).
Конечно, это было бы глупо. Но это не запрещено как таковое.
Обратите внимание, однако, что sizeof(char) == 1
по определению. Так что sizeof(char) <= sizeof(
что-нибудь еще )
.