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-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
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.
C type: cl_fixnum
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
C type: cl_index
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 <=
fix convert from an integer to a lisp object
of fixnum type and vice versa. These functions no not check their arguments.
Converts a lisp fixnum to a C integer of the appropriate size. Signals an error
o is not of fixnum type.
fixint but also ensures that
o is not negative.