Strona główna » Algorytmy » Artykuły » Znak - Moduł
 

Znak - Moduł

· Znak - Moduł · Kodowanie U1 ·

Wstęp

Znak - Moduł jest to system binarnego kodowania liczb całkowitych. Jest on prosty zarówno w zapisie jak i w użyciu dzięki temu, że jest bardzo zbliżony do tradycyjnego zapisu liczb. W środowisku komputerowym rzadko stosowany ze względu na kodowanie U2.

Opis kodowania ZM

Podczas tradycyjnego zapisu liczb całkowitych do oznaczania liczby ujemnej używa się znaku minus. Jednak jak wiadomo minus jest, albo go nie ma, więc w komputerze wystarczy tylko jeden taki bit. W kodowaniu ZM pierwszy bit zapisu oznacza znak: 0 oznacza liczbę dodatnią, a 1 oznacza liczbę ujemną. Dalsza część zapisu to zapis binarny kodowanej liczby.

Innymi słowy jeśli mamy liczbę składającą się z n bitów to indeksując od 0 tak, że najmniej znaczący bit to b0 otrzymujemy następujący wzór: WZM = (-1)bn - 1·(bn - 2 + .. + b2 + b1 + b0). Przypatrzmy się poniższym przykładom, aby to lepiej zrozumieć:

Zapis ZMPrzeliczenieZakodowana
liczba
01(-1)0·20 = 11
11(-1)1·20 = -1-1
0101(-1)0·(22 + 20) = 55
1111(-1)1·(22 + 21 + 20) = -7-7

W informatyce przyjmuje się, że komputer operuje na n bitach, gdzie n to pewna potęga liczby 2. Oznacza to, że liczba w zapisie ZM zawsze musi mieć n bitów. To powoduje, że istnieje wtedy potrzeba uzupełniania zapisu oraz zakres liczb jaki może być przechowywany. Niech przykładowo liczby będą przeliczane na zapis 4 i 8 bitowy.

Liczba
dziesiętna
ZnakModułKod ZM
4bity
Kod ZM
8bity
101000100000001
-111100110000001
70111011100000111
-401101000-10101000

W powyższej tabelce można zauważyć, że liczby -40 nie można zakodować na 4 bitach. Jest to spowodowane faktem, że w tym zapisie można zakodować tylko 3 bity modułu oraz bit znaku. Pozostaje teraz jeszcze przedstawić zakres liczb jaki można przechować w tym kodowaniu. Otóż zakres to [2n - 1 + 1, 2n - 1 - 1]. Należy również zauważyć, że w tym systemie istnieje podwójna reprezentacja zera! Otóż 100..00ZM = 000..00ZM = 0. Z tego powodu istnieje w tym zapisie zero dodatnie jak i ujemne. W informatyce powoduje to pewne problemy podczas porównywania liczb.

Arytmetyka

Arytmetyka liczb w kodowaniu ZM jest bardzo podobna do tych zapisanych binarnie lub dziesiętnie, ale należy pamiętać, że pierwszy bit oznacza znak. To powoduje pewne komplikacje, ponieważ pierwszy bit tak naprawdę nie posiada wartości, którą można dodać, albo odjąć. Jednak nie oznacza to, że trzeba rezygnować z poznanych zasad arytmetyki. Należy jedynie przyjąć dodatkowe założenia. Załóżmy, że mamy dwie liczby aZM oraz bZM, a oto operacje, które możemy na nich wykonać:

Dodawanie

Jeśli obie liczby mają takie same znaki to podczas dodawania pewne jest, że znak się nie zmieni. Inaczej jest, gdy są różnych znaków - wtedy może okazać się, że znak się zmieni na znak liczby o większym module.

Znak
aZM
Znak
bZM
OperacjaZnak końcowy
00sumowanie modułów0
11sumowanie modułów1
01odejmowanie modułu
mniejszego od większego
znak większego modułu
10odejmowanie modułu
mniejszego od większego
znak większego modułu

Przykłady

  0001
+ 0011
  0100
  1101
+ 1001
  1110
  1101
+ 0001
  1100
  0011
+ 1111
  1100

Odejmowanie

W tym przypadku znak jest ustalony dla liczb o różnych znakach, a trzeba dodatkowo go ustalać gdy obie liczby mają ten sam znak

Znak
aZM
Znak
bZM
OperacjaZnak końcowy
00odejmowanie modułu
mniejszego od większego
jeśli |a| > |b| to znak a
jeśli nie to przeciwny
11odejmowanie modułu
mniejszego od większego
jeśli |a| > |b| to znak a
jeśli nie to przeciwny
01sumowanie modułów0
10sumowanie modułów1

Mnożenie

Podczas mnożenia własności znaku utrzymują swoją moc z tradycyjnego mnożenia: dla takich samych znaków jest plus, a dla różnych znaków minus.

Znak
aZM
Znak
bZM
OperacjaZnak końcowy
00mnożenie modułów0
11mnożenie modułów0
01mnożenie modułów1
10mnożenie modułów1

Dzielenie

Podczas dzielenie liczb znak zmienia się tak samo jak podczas mnożenia liczb. Podczas dzielenie należy pamiętać, że nie zawsze dzielenie jest możliwe tak, aby przechować wszystkie informacje.

Znak
aZM
Znak
bZM
OperacjaZnak końcowy
00mnożenie modułów0
11mnożenie modułów0
01mnożenie modułów1
10mnożenie modułów1