integer-length (ANSI and GNU Common Lisp Document)

Next: integerp, Previous: ash, Up: Numbers Dictionary

#### 12.2.57 integer-length [Function]

`integer-length` integer ⇒ number-of-bits

#### Arguments and Values::

integer—an integer.

number-of-bits—a non-negative integer.

#### Description::

Returns the number of bits needed to represent integer in binary two’s-complement format.

#### Examples::

     (integer-length 0) ⇒  0
     (integer-length 1) ⇒  1
     (integer-length 3) ⇒  2
     (integer-length 4) ⇒  3
     (integer-length 7) ⇒  3
     (integer-length -1) ⇒  0
     (integer-length -4) ⇒  2
     (integer-length -7) ⇒  3
     (integer-length -8) ⇒  3
     (integer-length (expt 2 9)) ⇒  10
     (integer-length (1- (expt 2 9))) ⇒  9
     (integer-length (- (expt 2 9))) ⇒  9
     (integer-length (- (1+ (expt 2 9)))) ⇒  10

#### Exceptional Situations::

Should signal an error of type type-error if integer is not an integer.

#### Notes::

This function could have been defined by:

    (defun integer-length (integer)
      (ceiling (log (if (minusp integer)
                        (- integer)
                        (1+ integer))
                    2)))

If integer is non-negative, then its value can be represented in unsigned binary form in a field whose width in bits is no smaller than `(integer-length integer)`. Regardless of the sign of integer, its value can be represented in signed binary two’s-complement form in a field whose width in bits is no smaller than `(+ (integer-length integer) 1)`.