Assigning long values

The limits of long type integers defined in the limits.h standard library header file are different in 32-bit and 64-bit modes, as shown in the following table.

Table 3. Constant limits of long integers in 32-bit and 64-bit modes
Symbolic constant Mode Value Hexadecimal Decimal
LONG_MIN (smallest signed long) 32-bit -(231) 0x80000000L -2,147,483,648
64-bit -(263) 0x8000000000000000L -9,223,372,036,854,775,808
LONG_MAX (longest signed long) 32-bit 231-1 0x7FFFFFFFL +2,147,483,647
64-bit 263-1 0x7FFFFFFFFFFFFFFFL +9,223,372,036,854,775,807
ULONG_MAX (longest unsigned long) 32-bit 232-1 0xFFFFFFFFUL +4,294,967,295
64-bit 264-1 0xFFFFFFFFFFFFFFFFUL +18,446,744,073,709,551,615

Implications of these differences are:

In situations where a long-type value can overflow when assigned to other variables or passed to functions, you must: