Serwis Edukacyjny w I-LO w Tarnowie ![]() Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2023 mgr Jerzy Wałaszek
|
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 |
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) |
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
|
Przykład:
Przedstawić w 8-mio bitowym kodzie ZM liczbę o wartości dziesiętnej -9.
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) |
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.
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) są 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:
|
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ę.
Wyraź podane liczby dziesiętne w 8-bitowym zapisie ZM
Wykonaj dodawanie podanych poniżej liczb ZM
Wykonaj odejmowanie podanych poniżej liczb ZM
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
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2023 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.