### integer-length (Function)

##### Syntax:

— 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)`

.