Next: Characters, Previous: Constructing objects, Up: Lisp objects
Common-Lisp distinguishes two types of integer types: bignums and fixnums. A fixnum is a small integer, which ideally occupies only a word of memory and which is between the values MOST-NEGATIVE-FIXNUM and MOST-POSITIVE-FIXNUM. A bignum is any integer which is not a fixnum and it is only constrained by the amount of memory available to represent it.
In ECL a fixnum is an integer that, together with the tag bits, fits in a word of memory. The size of a word, and thus the size of a fixnum, varies from one architecture to another, and you should refer to the types and constants in the ecl.h header to make sure that your C extensions are portable. All other integers are stored as bignums, they are not immediate objects, they take up a variable amount of memory and the GNU Multiprecision Library is required to create, manipulate and calculate with them.
This is a C signed integer type capable of holding a whole fixnum without any loss of precision. The opposite is not true, and you may create a
cl_fixnum
which exceeds the limits of a fixnum and should be stored as a bignum.
This is a C unsigned integer type capable of holding a nonnegative fixnum without loss of precision. Typically, a
cl_index
is used as an index into an array, or into a proper list, etc.
These constants mark the limits of a fixnum.
These functions perform the checks (o < 0) and (0 <= o), respectively.
MAKE_FIXNUM
andfix
convert from an integer to a lisp object of fixnum type and vice versa. These functions no not check their arguments.