Two compliment numbers are used in computers to represent negative numbers in unsigned numbers. They are modulo numbers. They form a ring of numbers.
I want 2's compliment numbers for bases other than powers of 2
I want two compliment and modulo arithmetic for base 100. What do I have to do to adjust a value in an 8 bit register.
Here is the number line:
+ - -+ - -+ - -+ - -+ - -+ - -+ -3 -2 -1 0 1 2 3
253 254 255 0 1 2 3
97 98 99 0 1 2 3
Lets add -1 to -1 to get -2.
When 2^8 =256, 255 represents -1 Lets add 255 to 255.
I get 510, getting an overflow and 510-256 = 254 which represents -2
Lets add 99 to 99. I get 198, but 99 is also -1 in 2's compliment where 2^n = 100 ( n is not an integer )
If result is > 100 subtract 100 to give 98 which represents -2.
Now lets add -10 to -10 to get -20 in 2's compliment.
For 2^8 = 256
256 - 10 = 246
256 - 10 = 246
246 + 246 = 492
492-256 = 236
236 - 256 = -20
For 2^n = 100 storing in 8 bits
100 -20 = 80 100 -20 = 80
80 + 80 = 160
If 160 > 100 then 160 - 100 = 60
if 60 > 100 / 2 then 60 - 100 = - 40
For 2^n = 200 storing in 8 bits
200 -20 = 180 200 -20 = 180
180 + 180 = 360 which does not fit in 256
180 + 180 = 360 modulo 256 = 104
If 104 > 100 then 160 - 100 = 60
if 104 > 100 / 2 then 60 - 100 = - 40
Numbers range from 0 to N where N is a power of 2
To save negative numbers add a constant K so that the numbers are between 0 and N
Do arithmetic in registers that can store 0 to 2N
Ensure that the results are constrained between 0 and N
convert back to negative by subtracting K
N does not need to be a power of two but you need to use registers that store unsigned numbers greater that 2*N.
+ - -+ - -+ - -+ - -+ - -+ - -+ - -+ -2 -1 0 1 2 3 4 5
6 7 0 1 2 3 4 5
K = 2
2^n=8