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.