On Thu, 2026-06-11 at 11:29 -0400, Paul Koning via cctalk wrote:
On Jun 11, 2026, at 11:19 AM, r.stricklin via
cctalk
<cctalk(a)classiccmp.org> wrote:
On Jun 11, 2026, at 8:09 AM, Paul Koning via
cctalk
<cctalk(a)classiccmp.org> wrote:
A lot of systems used one's complement through the 1960s. I'm
not really sure why. Not just for integers but floating point
also (as on the CDC mainframes, and around the same time the
Electrologica X8 with a slightly different approach).
My understanding of it is, it makes the logic simpler. But the cost
is software complexity.
It doesn't really make the software more complex, just different.
I can see the logic thing, more or less. You end up with just
complement both for logic and arithmetic operations (it doubles as
negate). The end-around carry seems to complicate things but it
doesn't really because you have carry anyway, so you just end up with
an ALU that looks like a circle. The only additional logic I can see
is that a test for zero requires matching both +0 and -0.
Univac 1108 "test zero" would skip on +0 or -0. "Jump if zero" wolud
jump if +0 or -0. It also had a field in instructions to select a part
of a word, so if the word is a number and you want a part of it, say
one sixth, you need to be careful. The ALU didn't produce negative
zero, at least not for addition and subtraction, but the Fortran
compiler had the subtract backward for some reason. A = B - C was "load
C, subtract B, store negative A," so if B==C you ended up with A = -0.
It was common to see a button or sticker "Down With Negative Zero."