ANSI C defines the following sizes for the various primitive data types.
char
minimum signed range: -128 .. 127
minimum unsigned range: 0 .. 255
can be larger, but regardless of size, sizeof(char) == 1
sizeof(unsigned char) == 1
short
minimum signed range: -32768 .. 32767
minimum unsigned range: 0 .. 65535
can be larger
long
minimum signed range: -2147483648 .. 2147483647
minimum unsigned range: 0 .. 4294967295
can be larger
int
must have, at a miminum, the same range as a short
can have the same range as a long
cannot have a range larger than a long
short <= int, and int <= long, but short < long
There are a bunch more rules for floats and doubles, but generally, the range of a float is <= the range of a double (for modern machines---float is 4 bytes, double is 8).