2. Kody numeryczne i arytmetyka cyfrowa

2.9. Zapis uzupełnień do W–1 i zapis uzupełnień do 1

Zapis uzupełnień do W-1 służy do zapisywania liczb całkowitych. Jeśli liczba mZ jest nieujemna, tzn. m ≥ 0, to zapisujemy ją tak:

m = 0an-1an-2...a0

gdzie an-1an-2a...ajest naturalnym zapisem wagowym z wagą W liczby m, a więc:

m = \displaystyle\sum^{n-1}_{i=0}a_iW^i.

Jeśli liczba mZ jest ujemna (lub równa 0), tzn. LZ, to wstępnie obliczamy jak wyżej słowo kodowe odpowiadające liczbie |m| zapisujemy je tak: |m| = bnbn-1bn-2...b0 a następnie jako słowo kodowe odpowiadające m przyjmujemy słowo będące uzupełnieniem do W-1 słowa bnbn-1bn-2...b0.

Jeśli w opisanej wyżej procedurze stosujemy zamiast naturalnego zapisu wagowego z wagą W zapis naturalny wagowy z wagą W o stałej długości n słowa kodowego to uzyskujemy zapis uzupełnień do W-1 ze stałą długością słowa kodowego. Zakres takiego zapisu uzupełnień do jedności jest równy <−Wn+1,Wn−1>.

W systemach cyfrowych wykorzystuje się najczęściej zapis uzupełnień do 1 ze słowem kodowym o stałej długości. Dla takiego zapisu przy słowie o długości n+1 zakres zapisu jest równy <−2n+1,2n−1>. Zapis uzupełnień do 1 nazywa się też zapisem U1.

Zauważmy, że z definicji zapisu uzupełnień do W-1 wynika różnowartościowość zdefiniowanego kodu na zbiorze Z \ {0} lub <−Wn+1,Wn−1> \ {0} (w przypadku zastosowania słowa o długości n+1) ale liczba 0 może mieć 2 reprezentacje. Np. w przypadku zastosowania kodu uzupełnień do 1 o stałej długości słowa n+1 liczba 0 reprezentowana jest każdym ze słów: \underset{n+1}{\underbrace{00...0}} oraz \underset{n+1}{\underbrace{11...1}} czyli mamy 2 różne słowa oznaczające 0.

Algorytm obliczania liczby przeciwnej jest w zapisie uzupełnień do W-1 wyjątkowo łatwy. Obliczmy po prostu uzupełnienie do W-1 słowa wejściowego. W przypadku U1 sprowadza się to do zanegowania bitów.

Zapiszmy liczbę –5 w 8 bitowym zapisie uzupełnień do 1 (tzn. ze słowem kodowym o długości 8). Liczbę 5 zapisujemy wstępnie jako słowo 8 bitowe 00000101 (w 8 bitowym kodzie NKB). Ponieważ –5<0 obliczamy uzupełnienie do 1 słowa 00000101 i uzyskujemy ostatecznie 11111010.