Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek

©2024 mgr Jerzy Wałaszek
I LO w Tarnowie

Zapis w systemie znak-moduł - ZM

SPIS TREŚCI
Podrozdziały

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:

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 · 0 0
0001 (-1)0 · (20) 1
0010 (-1)0 · (21) 2
0011 (-1)0 · (21 + 20) 3
0100 (-1)0 · (22) 4
0101 (-1)0 · (22 + 20) 5
0110 (-1)0 · (22 + 21) 6
0111 (-1)0 · (22 + 21 + 20) 7
1000 (-1)1 · 0 0
1001 (-1)1 · (20) (-1)
1010 (-1)1 · (21) (-2)
1011 (-1)1 · (21 + 20) (-3)
1100 (-1)1 · (22) (-4)
1101 (-1)1 · (22 + 20) (-5)
1110 (-1)1 · (22 + 21) (-6)
1111 (-1)1 · (22 + 21 + 20) (-7)

W tabelce powyżej 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)

Na początek:  podrozdziału   strony 

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).

Na początek:  podrozdziału   strony 

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:

Zapamiętaj:

Zakres n bitowej liczby w kodzie ZM wynosi

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)

Na początek:  podrozdziału   strony 

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 czterema 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).

Na początek:  podrozdziału   strony 

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) · 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 · 2
0
011
· 0 010
    (-3) · (-2)
1 011
 
· 1 010
    3 · (-2)
0 011
 
· 1 010
    (-3) · 2
1 011
 
· 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)

Na początek:  podrozdziału   strony 

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


Na początek:  podrozdziału   strony 

Zobacz dalej...

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


Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2024 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.