# Re: #o and unsignedness

• To: Guy.Steele at CMU-10A
• Subject: Re: #o and unsignedness
• From: Robert W. Kerns <RWK at MIT-MC>
• Date: Sat, 1 Nov 80 17:30:00 GMT
• Cc: BUG-LISP at MIT-MC
• Original-date: 1 November 1980 12:30-EST

```    Date: 31 October 1980 1722-EST (Friday)
From: Guy.Steele at CMU-10A
To: RWK at MIT-MC (Robert W. Kerns)
Subject:  Re: #o and unsignedness
CC: bug-lisp at MIT-MC
In-Reply-To:  RWK@MIT-MC's message of 31 Oct 80 16:13-EST
Message-Id: <31Oct80 172251 SL5P@CMU-10A>

The truncation I referred to was chopping off the poor "integer"
and forcing it to fit into a fixnum (thereby causing some bits
possibly to be lost, but in any case suddenly altering the
weight of one of its bits, from 2^25 to -2^35!!!).

Ah, but this altering of the weight of one of it's bits only occurs when you
stop thinking of it as an unsigned integer.  One wouldn't use #*O when one
meant anything other than an unsigned integer, so this altering in meaning
wouldn't occur.  This is no different than packing two nubers into a single
integer, representing a character by a fixnum, etc.  If I'm representing
something like 2 18-bit positive numbers, and consider the combination as
a combination of 2 18-bit numbers consistantly, it doesn't matter at all to
me that occasionally one of these combininations would be considered to be
negative if considered as a single fixnum on a machine of 36 bits or less;
I never consider them as a single fixnum!

There is a problem with #*O..., which is that if #B means binary
then #*B is ambiguous on a machine where just plain #* means
Not if #* by itself never means hexadecimal, which was my proposal.

Letting #* vary in radix from machine to machine isn't all that
much of a problem -- the machines may have different word
lengths as well, after all.
They also may have a different number of disk drives.  So what?  So my code
shouldn't read in even aproximately, because when I wrote #*ABC, now it tries
to read it as octal?  Tell me what GOOD it does to have the base varying and
unspecified, as opposed to specified.

Indeed, there is a nice symmetry between *, +, and - -- that's
why I originally proposed to use *nnnn* (the stars actually
being independent -- the treailing star was the "machine-radix point",
and the leading one meant "unsigned fixnum" -- so that -nnn*
and *ddd. actually made sense.  But reason prevailed, and we
got #*, which actually is rather nice to me now.)

```