(lispref.info)Integer Basics


Next: Float Basics Up: Numbers

Integer Basics
==============

   The range of values for an integer depends on the machine.  The
range is -8388608 to 8388607 (24 bits; i.e.,

   -2**23 to

   2**23 - 1 ) on most machines, but on others it is -16777216 to
16777215 (25 bits), or -33554432 to 33554431 (26 bits).  All of the
examples shown below assume an integer has 24 bits.

   The Lisp reader reads numbers as a sequence of digits with an
optional sign.

      1               ; The integer 1.
     +1               ; Also the integer 1.
     -1               ; The integer -1.
      16777217        ; Also the integer 1, due to overflow.
      0               ; The number 0.
     -0               ; The number 0.
      1.              ; The integer 1.

   To understand how various functions work on integers, especially the
bitwise operators (Note: Bitwise Operations.), it is often helpful to
view the numbers in their binary form.

   In 24 bit binary, the decimal integer 5 looks like this:

     0000 0000  0000 0000  0000 0101

(We have inserted spaces between groups of 4 bits, and two spaces
between groups of 8 bits, to make the binary integer easier to read.)

   The integer -1 looks like this:

     1111 1111  1111 1111  1111 1111

-1 is represented as 24 ones.  (This is called "two's complement"
notation.)

   The negative integer, -5, is creating by subtracting 4 from -1.  In
binary, the decimal integer 4 is 100.  Consequently, -5 looks like this:

     1111 1111  1111 1111  1111 1011

   In this implementation, the largest 24 bit binary integer is the
decimal integer 8,388,607.  In binary, this number looks like this:

     0111 1111  1111 1111  1111 1111

   Since the arithmetic functions do not check whether integers go
outside their range, when you add 1 to 8,388,607, the value is negative
integer -8,388,608:

     (+ 1 8388607)
          => -8388608
          => 1000 0000  0000 0000  0000 0000

   Many of the following functions accept markers for arguments as well
as integers.  (Note: Markers.)  More precisely, the actual parameters
to such functions may be either integers or markers, which is why we
often give these parameters the name INT-OR-MARKER.  When the actual
parameter is a marker, the position value of the marker is used and the
buffer of the marker is ignored.


automatically generated by info2www