Zapis w systemie znak-moduł - ZM


Podrozdziały Tematy pokrewne

 

Wartość liczby w zapisie znak - moduł

Koncepcyjnie zapis znak - moduł (w skrócie ZM - ang. SM Signed Magnitude) jest najbardziej zbliżony do systemu zapisu liczb używanego przez nas samych. Liczba ZM składa się z dwóch części - bitu znaku oraz bitów wartości liczby (modułu):

 

bn-1

bn-2 bn-3 ... b2 b1 b0

bn-1 - bit znaku liczby
bn-2 ... b0 - bity modułu liczby

 

Dla liczb dodatnich i zera bit znaku ma wartość 0, dla liczb ujemnych i zera ma wartość 1. Format zapisu ZM musi być ściśle ustalony, aby wiadomo było, który bit jest bitem znaku - w operacjach arytmetycznych bit znaku musimy traktować inaczej niż inne bity, o czym wkrótce się dowiemy.

 

Zapamiętaj:

Moduł liczby ZM jest zapisany w naturalnym kodzie dwójkowym NBC, zatem w celu obliczenia jej wartości moduł mnożymy przez 1, gdy bit znaku wynosi 0 lub przez -1, gdy bit znaku wynosi 1. Wzór jest następujący:

 

LZM = (-1)bit znaku × moduł liczby

 

Rozpisując poszczególne bity otrzymujemy:

bn-1bn-2...b2b1b0 = (-1) bn-1  × (bn-22n-2 + ... + b222 + b121 + b020)

gdzie

b - bit, cyfra dwójkowa 0 lub 1
n - liczba bitów w zapisie liczby

 

 

4 bitowy system ZM
Kod ZM Przeliczenie Wartość
0000 (-1)0 x 0 0
0001 (-1)0 x (20) 1
0010 (-1)0 x (21) 2
0011 (-1)0 x (21 + 20) 3
0100 (-1)0 x (22) 4
0101 (-1)0 x (22 + 20) 5
0110 (-1)0 x (22 + 21) 6
0111 (-1)0 x (22 + 21 + 20) 7
1000 (-1)1 x 0 0
1001 (-1)1 x (20) (-1)
1010 (-1)1 x (21) (-2)
1011 (-1)1 x (21 + 20) (-3)
1100 (-1)1 x (22) (-4)
1101 (-1)1 x (22 + 20) (-5)
1110 (-1)1 x (22 + 21) (-6)
1111 (-1)1 x (22 + 21 + 20) (-7)

W tabelce obok przedstawiliśmy wszystkie możliwe do utworzenia liczby w 4-ro bitowym kodzie ZM. Zwróć uwagę, iż wartość 0 posada dwa słowa kodowe: 0000 oraz 1000. W obu przypadkach wartość modułu wynosi 0.

Liczby ujemne uzyskujemy przez ustawienie bitu znaku na 1. Zatem

 

3(10) = 0011(ZM) , (-3)(10) = 1011(ZM).

 

Przykład:

Obliczyć wartość dziesiętną liczby 10110111(ZM).

Pierwszy bit zapisu ZM jest bitem znaku. Wartość 1 informuje nas, iż jest to liczba ujemna. Pozostałe bity tworzą wartość liczby. Moduł jest zapisany w naturalnym systemie dwójkowym, zatem:

 

10110111(ZM) = (-1)1 × (25 + 24 + 22 + 21 + 20)
10110111(ZM) = - (32 + 16 + 4 + 2 + 1)
10110111(ZM) = - 55(10)

Przykład:

Obliczyć wartość dziesiętną liczby 00011111(ZM).

Bit znaku ma wartość 0, zatem jest to liczba dodatnia. Wartość tej liczby jest równa wartości jej modułu zapisanego w naturalnym kodzie dwójkowym.

 

00011111(ZM) = (-1)0 × (24 + 23 + 22 + 21 + 20)
00011111(ZM) = (16 + 8 + 4 + 2 + 1)
00011111(ZM) = 31(10)


Przeliczanie liczb dziesiętnych na liczby ZM

Jeśli zrozumiałeś poprzedni rozdział, to metodę przeliczania liczby dziesiętnej na zapis ZM powinieneś już znać. Przeliczenie to wymaga wyznaczenie wartości bitu znaku oraz bitów modułu. Procedura jest następująca:

 

Zapamiętaj:

Procedura wyznaczania zapisu ZM liczby dziesiętnej

  1. Jeśli liczba jest dodatnia, to bit znaku ma wartość 0. W przeciwnym razie bit znaku ma wartość 1.
  2. Obliczamy wartość absolutną liczby, czyli jej moduł.
  3. Wyznaczamy bity modułu według metody podanej w rozdziale o przeliczaniu liczb dziesiętnych na system dwójkowy.
  4. Otrzymane bity modułu uzupełniamy w miarę potrzeby bitami o wartości 0, aby otrzymać ustaloną w formacie liczbę bitów dla modułu.
  5. Do bitów modułu dodajemy bit znaku i otrzymujemy zapis ZM.

 

Przykład:

Przedstawić w 8-mio bitowym kodzie ZM liczbę o wartości dziesiętnej -9.

  1. Wyznaczamy bit znaku. Liczba -9 jest ujemna, zatem b7 = 1 (najstarszy bit).
  2. Wartość absolutna z -9 to 9 (po prostu opuszcza się znak -).
  3. Obliczamy zapis dwójkowy modułu 9(10) = 1001(2).
  4. Moduł 8-mio bitowej liczby ZM składa się z 7 bitów, zatem do otrzymanego wyniku dodajemy trzy początkowe zera otrzymując 0001001.
  5. Łączymy bit znaku 1 z bitami modułu 0001001 i dostajemy zapis ZM liczby -9(10) = 10001001(ZM).

Zakres liczb ZM

Zadanie polega na znalezieniu najmniejszej i największej wartości liczby, którą da się przedstawić w danym zapisie ZM. Łatwo zauważyć, że w obu przypadkach moduł musi mieć wartość maksymalną, a bit znaku 1 dla wartości najmniejszej i 0 dla wartości największej. Ponieważ moduł jest zapisany w naturalnym kodzie dwójkowym NBC, jego wartość jest równa maksymalnej wartości n-1 bitowej liczby dwójkowej. Dla n bitów otrzymujemy:

 

min(ZM) = 1bn-2bn-3...b2b1b0 = (-1) × (bn-22n-2 + bn-32n-3 + ...b222 + b121 + b020) = -2n-1 + 1

max(ZM) = 0bn-2bn-3...b2b1b0 = 1 × (bn-22n-2 + bn-32n-3 + ...b222 + b121 + b020) = 2n-1 - 1

 

Zapamiętaj:

Zakres n bitowej liczby w kodzie ZM wynosi

 

Z(ZM) = -2n-1 + 1 ... 2n-1 - 1

 

Przykład:

4 bitowe liczby ZM posiadają zakres:

od  -23 + 1  =  -7  = 1111(ZM)
do  23 - 1  =  7  = 0111(ZM1)

 

8 bitowe liczby ZM posiadają zakres:

od  -27 + 1  =  -127  = 11111111(ZM)
do  27 - 1  =  127  = 01111111(ZM1)

 

16 bitowe liczby ZM posiadają zakres:

od  -215 + 1  =  -32767  = 1111111111111111(ZM)
do  215 - 1  =  32767  = 0111111111111111(ZM1)

 

Stałoprzecinkowe liczby ZM

Nic nie stoi na przeszkodzie, aby moduł liczby ZM był dwójkową liczbą stałoprzecinkową.

 

Przykład:

Oblicz wartość stałoprzecinkowej liczby ZM 1001,1101(ZM).

Najstarszy bit zapisu liczby jest bitem znaku. Posiada on wartość 1, zatem liczba jest ujemna. Wyznaczamy wartość jej modułu, który jest dwójkową liczbą stałoprzecinkową:

001,1101(2) = 1 13/16

Stąd:

1001,1101(ZM) = (-1) • (1 13/16) = -1 13/16

 

Przykład:

Wyznacz zapis ZM liczby dziesiętnej -3,75. Format ZM jest 8-mio bitowy. Moduł posiada cztery cyfry ułamkowe.

  1. Liczba -3,75 jest ujemna, zatem bit znaku wynosi 1.
  2. Moduł liczby jest równy 3,75.
  3. Wyznaczamy dwójkowy zapis modułu: 3,75(10) = 11,11(2)
  4. W podanym formacie ZM moduł jest 7-mio bitowy z 4-ema bitami ułamkowymi. Otrzymany zapis dwójkowy musimy zatem odpowiednio uzupełnić bitami o wartości 0, aby był zgodny z formatem:
    11,11 = 011,1100

  5. Do tak otrzymanego modułu dodajemy bit znaku otrzymując: -3,75(10) = 1011,1100(ZM).

Arytmetyka liczb ZM

Już proste dodawanie dwóch liczb ZM może przekonać nas, iż podane wcześniej zasady arytmetyki liczb dwójkowych są niewystarczające dla tego systemu zapisu liczb:

 

  0011     3
+  1011       +  (-3)
  1110     (-6)

 

Musimy przyjąć dodatkowe założenia (o ile nie chcemy zmieniać dobrych zasad arytmetyki dwójkowej). Przede wszystkim w działaniach uczestniczą tylko moduły liczb.  Bity znaków pełnią różne funkcje decyzyjne, które opisaliśmy w poniższych tabelkach.

 

Reguły dodawania liczb ZM
wynik = a(ZM) + b(ZM)
Znak a(ZM) Znak b(ZM) operacja Znak wyniku
0 0 dodawanie
modułów
0
1 1 dodawanie
modułów
1
0 1 odejmowanie
modułu mniejszego
od modułu większego
znak większego
modułu
1 0

 

3+2
0 011
+ 0 010
   -3 + (-2)
1 011
+
1 010
    4 + (-6)
1 110
-
0 100
    5 + (-3)
0 101
-
1 011
0 101
5
1 101
(-5)
1 010
(-2)
0 010
2

 

Reguły odejmowania liczb ZM
wynik = a(ZM) - b(ZM)
Znak a(ZM) Znak b(ZM) operacja Znak wyniku
0 0 odejmowanie
modułu mniejszego
od modułu większego
Znak a(ZM), jeśli moduł ten jest większy
od modułu b(ZM). Inaczej znak przeciwny.
1 1
0 1 dodawanie
modułów
0
1 0 dodawanie
modułów
1

 

3 - 2
0 011
-
0 010
    (-3) - (-2)
1 011
-
1 010
    2 - (-3)
0 010
+
1 011
    (-5) - 2
1 101
+
0 010
0 001
1
1 001
(-1)
0 101
5
1 111
(-7)

 

Reguły mnożenia i dzielenia liczb Z-M
wynik = a(ZM) x b(ZM)
wynik = a(ZM) : b(ZM)
Znak a(ZM) Znak b(ZM) operacja Znak wyniku
0 0 mnożenie
lub
dzielenie
modułów
Jeśli znaki a(ZM) i b(ZM)
takie same, to 0.
Inaczej 1
1 1
0 1
1 0

 

3 x 2
0
011
x 0 010
    (-3) x (-2)
1 011
 
x 1 010
    3 x (-2)
0 011
 
x 1 010
    (-3) x 2
1 011
 
x 0 010
0 110
6
0 110
6
1 110
(-6)
1 110
(-6)

 

Zapamiętaj:

Ponieważ liczby zapisane w systemie ZM posiadają ustalony format (ilość bitów jest stała), to przy wykonywaniu operacji arytmetycznych może dochodzić do nadmiarów (wynik większy niż można przedstawić za pomocą dostępnych bitów modułu) lub niedomiarów. Przy dodawaniu i odejmowaniu wg opisanych reguł dla liczb ZM nadmiar (niedomiar) można wykryć, jeśli wystąpiło przeniesienie (lub pożyczka) na pozycję znakową. Na przykład dla 4 bitowych liczb ZM:

 

7 + 2
0 111
+ 0 010
1 001
(-1)

 

Zadania

Zadanie 1 (łatwe)

Oblicz wartości dziesiętne podanych poniżej liczb w zapisie ZM. Wartości ułamkowe wpisz w postaci ułamka właściwego, na przykład  6 3/4. Pomiędzy częścią całkowitą a ułamkową umieść dokładnie jedną spację.
1101(ZM) =   

.

00011111(ZM) =   

.

10001111(ZM) =   

.

1001,1001(ZM) =   

.

1111,1111(ZM) =   

.

 

Zadanie 2 (łatwe)

Wyraź podane liczby dziesiętne w 8-mio bitowym zapisie ZM
25(10) = (ZM)  

.

-31(10) = (ZM)  

.

65(10) = (ZM)  

.

-127(10) = (ZM)  

.

-100(10) = (ZM)  

.

 

Zadanie 3 (łatwe)

Wykonaj dodawanie podanych poniżej liczb ZM
0100(ZM) + 0010(ZM) = (ZM)  

.

0111(ZM) + 1011(ZM) = (ZM)  

.

1011(ZM) + 1010(ZM) = (ZM)  

.

1111(ZM) + 0101(ZM) = (ZM)  

.

0111(ZM) + 1000(ZM) = (ZM)  

.

 

Zadanie 4 (łatwe)

Wykonaj odejmowanie podanych poniżej liczb ZM
0110(ZM) - 0011(ZM) = (ZM)  

.

0101(ZM) - 1001(ZM) = (ZM)  

.

1100(ZM) - 1010(ZM) = (ZM)  

.

1111(ZM) - 1110(ZM) = (ZM)  

.

0011(ZM) - 1100(ZM) = (ZM)  

.

 

Zadanie 5 (średnio łatwe)

Na podstawie materiału przedstawionego w tym rozdziale wymień wady i zalety systemu ZM.

 


Zobacz dalej...

Zapis uzupełnień do 1 - U1 | Zapis uzupełnień do 2 - U2 | Zapis dwójkowy z nadmiarem | Podsumowanie systemów dwójkowych



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.