# Twos Compliment

HomePage | RecentChanges | Preferences

### 2's compliment numbers

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
```

### 2's compliment numbers - rules

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's compliment numbers - skewed Number lines.

```  + - -+ - -+ - -+ - -+ - -+ - -+ - -+
-2   -1   0    1    2    3    4    5
```

```  6    7    0    1    2    3    4    5
```

``` K = 2
```

``` 2^n=8
```

HomePage | RecentChanges | Preferences