I feel this choice in having 0 = positive is a little contrarian to booleans, which have 0 = false.
I know the opposite of positive isn't false, but the two sets of antipodal terms (true false, positive negative) are related enough where I find this design choice odd.
Assume we followed your logic and made positive numbers have a sign bit of 1 and negative numbers have a sign bit of 0. Let's take two cases using 4 bit numbers:
In traditional sign bits, zero is represented as 0000
. The sign bit here is the same as positive numbers one to seven. Are you going to make the zero in your representation be 1000
to match the sign bit of the other positive integers in your system? That means 0000
is going to represent some other negative number...that's pretty confusing. We'd need two mental models to understand numbers that are signed vs. unsigned.
Let's say we avoided that zero issue by leaving it as 0000
but we made the number one be represented by 1001
(or even 1000
). That means if we did 1+1
we do 1001 + 1001
which equals 0010
(or 1000 + 1000 = 0000
) since we drop the last carry. So in your new representation, that means 1+1
now equals a negative number. That doesn't make sense.
The beauty of positive numbers having a sign bit of 0 and negative being 1 is that a) if you add any two numbers, as long as their answer is within their bounds (4 bit numbers have the bounds of -8 to 7), the addition will work out correctly and b) our usual mental model of zero being 0000
still holds along with having consistency between signed and unsigned numbers.