They can be of any size required by the compiler author, provided that they are at least the same as their predecessor ( long int for long long int and int for long int ) and satisfy the minimum ranges specified in the standards.
See, for example, 5.2.4.2 Numerical limits in C11 for the required minimum range:
long int LONG_MIN -2147483647
Please note that this is not your complete set of two additions, since they must take into account the other two coding schemes, as well as additions and signed values, both of which have the concept of negative zero.
If you really want to know, you can simply view these values ββin the limits.h header file or compile and run:
#include <stdio.h> #include <limits.h> int main (void) { printf ("BITS/CHAR %d\n", CHAR_BIT); printf ("CHARS/SHORT %d\n", sizeof(short)); printf ("CHARS/INT %d\n", sizeof(int)); printf ("CHARS/LONG %d\n", sizeof(long)); printf ("CHARS/LLONG %d\n", sizeof(long long)); putchar ('\n'); printf ("SHORT MIN %d\n", SHRT_MIN); printf ("SHORT MAX %d\n", SHRT_MAX); printf ("INT MIN %d\n", INT_MIN); printf ("INT MAX %d\n", INT_MAX); printf ("LONG MIN %ld\n", LONG_MIN); printf ("LONG MAX %ld\n", LONG_MAX); printf ("LLONG MIN %lld\n", LLONG_MIN); printf ("LLONG MAX %lld\n", LLONG_MAX); return 0; }
My system is pretty standard swamp (and a bit reformatted to look pretty):
BITS/CHAR 8 CHARS/SHORT 2 CHARS/INT 4 CHARS/LONG 4 CHARS/LLONG 8 SHORT MIN -32768 SHORT MAX 32767 INT MIN -2147483648 INT MAX 2147483647 LONG MIN -2147483648 LONG MAX 2147483647 LLONG MIN -9223372036854775808 LLONG MAX 9223372036854775807
So it looks like I have two additions on this system ( 8/7 mismatch on the last digit of negative / positive numbers), without padding bits, 16-bit short int , 32-bit int and long int and 64-bit long long int
If you run similar code in your own environment, it should be able to tell you about such information.