Not. The standard defines only the minimum ranges for each of these types. Presumably, int may have a 16-bit range, but 48 bits of padding, bringing it to 64 bits (8 bytes if CHAR_BITS == 8), and a long one is 32-bit (4 bytes).
Of course that would be stupid. But this is not prohibited, as such.
Note, however, that sizeof(char) == 1 , by definition. So sizeof(char) <= sizeof( anything else ) .
source share