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.
Using one's complement style float notation means a bunch of the operations (like
negate/complement) apply to floating point operands as well, no separate fneg operation
needed. And with the right exponent notation, an integer not exceeding the mantissa size
doubles as a valid floating point value for that same number.
CDC made things a little easier for programmers to understand because they used a
subtractor circuit, so you end up with +0 for all operations that involve non-zero or +0
operands. Others tended to use adders, so you end up with -0 most of the time. Still no
problem so long as you remember it.
paul