**Syntax:**

**logcount** *integer* => *number-of-on-bits*

**Arguments and Values:**

*integer*---an *integer*.

*number-of-on-bits*---a non-negative *integer*.

**Description:**

Computes and returns the number of bits in the two's-complement binary representation of *integer* that are `on' or `set'. If *integer* is negative, the `0` bits are counted; otherwise, the `1` bits are counted.

**Examples:**

(logcount 0) => 0 (logcount -1) => 0 (logcount 7) => 3 (logcount 13) => 3 ;Two's-complement binary: ...0001101 (logcount -13) => 2 ;Two's-complement binary: ...1110011 (logcount 30) => 4 ;Two's-complement binary: ...0011110 (logcount -30) => 4 ;Two's-complement binary: ...1100010 (logcount (expt 2 100)) => 1 (logcount (- (expt 2 100))) => 100 (logcount (- (1+ (expt 2 100)))) => 1

**Side Effects:** None.

**Affected By:** None.

**Exceptional Situations:**

Should signal **type-error** if its argument is not an *integer*.

**See Also:** None.

**Notes:**

Even if the *implementation* does not represent *integers* internally in two's complement binary, **logcount** behaves as if it did.

The following identity always holds:

(logcount x) == (logcount (- (+ x 1))) == (logcount (lognot x))