Previous: Integer Representations, Up: Integers in Depth [Contents][Index]
For each primitive integer type, there is a standard macro defined in
limits.h that gives the largest value that type can hold. For
instance, for type int, the maximum value is INT_MAX.
On a 32-bit computer, that is equal to 2,147,483,647. The
maximum value for unsigned int is UINT_MAX, which on a
32-bit computer is equal to 4,294,967,295. Likewise, there are
SHRT_MAX, LONG_MAX, and LLONG_MAX, and
corresponding unsigned limits USHRT_MAX, ULONG_MAX, and
ULLONG_MAX.
Since there are three ways to specify a char type, there are
also three limits: CHAR_MAX, SCHAR_MAX, and
UCHAR_MAX.
For each type that is or might be signed, there is another symbol that
gives the minimum value it can hold. (Just replace MAX with
MIN in the names listed above.) There is no minimum limit
symbol for types specified with unsigned because the
minimum for them is universally zero.
INT_MIN is not the negative of INT_MAX. In
two’s-complement representation, the most negative number is 1 less
than the negative of the most positive number. Thus, INT_MIN
on a 32-bit computer has the value -2,147,483,648. You can’t
actually write the value that way in C, since it would overflow.
That’s a good reason to use INT_MIN to specify
that value. Its definition is written to avoid overflow.