# Re: Twos complement assumption, other issues

This page is part of the web mail archives of SRFI 60 from before July 7th, 2015. The new archives for SRFI 60 contain all messages, not just those from before July 7th, 2015.

``` | From: "Scott G. Miller" <sgmiller@xxxxxxxxx>
| Date: Sat, 15 Jan 2005 18:44:40 +0100
|
| The SRFI assumes that integers are represented in two's complement
| form, and states as such.  Since R5RS makes no such assumption,
| perhaps it would be worthwhile to have a line or two (maybe in the
| implementation or rational sections) noting that the functions can
| be implemented by converting to/from twos complement as necessary,
| but that the majority of implementations already treat integers
| this way.

I have added a section to the Rationale:

Bits and Complements

A bit-index in these descriptions is nonnegative with the least
significant bit at index 0.

The reference implementation is written using only Scheme integer
operations.  Thus the only exposure of the underlying representation is
in the ranges of fixnums.

The complement describes the representation of negative integers.
With one's-complement fixnums, the range of integers is -(2^n) to 2^n,
and there are two possible representations of 0. With
two's-complement fixnums, the range of integers is -(1+2^n) to 2^n.

Since we treat integers as having two's-complement negations, the
two's-complement of an integer is its negation.  The one's-complement
of an integer is computed by lognot:

(define (lognot n) (- -1 n))

A positive integer has a finite number of "1" bits. A negative integer
has a finite number of "0" bits.

| In other discussions, I also prefer SRFI-33's names (and title!),

I have changed the title to "Integers as Bits".