Login lub e-mail Hasło   

Zapis znak-moduł - ZM

Odnośnik do oryginalnej publikacji: http://www.i-lo.tarnow.pl/edu/inf/alg/nu(...)ex.html
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ła...
Wyświetlenia: 9.935 Zamieszczono 01/11/2006

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

   
   
   

Wartość dziesiętna liczby w zapisie ZM

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

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 x (25 + 24 + 22 + 21 + 20)
10110111
(ZM) = - (32 + 16 + 4 + 2 + 1)
10110111
(ZM) = - 55(10)

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 x (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:

   
   
   

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.

 
       

 

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

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) x (bn-22n-2 + bn-32n-3 + ...b222 + b121 + b020) = -2n-1 + 1

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

   
   
   

Zakres n bitowej liczby w kodzie ZM wynosi

Z(ZM) = <-2n-1 + 1, 2n-1 - 1>

 
       

 

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

 

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) x (1 13/16) = -1 13/16

 

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

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)
   
   
   

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)
Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Podobne artykuły


16
komentarze: 5 | wyświetlenia: 9002
9
komentarze: 0 | wyświetlenia: 2781
49
komentarze: 18 | wyświetlenia: 64968
37
komentarze: 9 | wyświetlenia: 28509
17
komentarze: 4 | wyświetlenia: 14153
15
komentarze: 5 | wyświetlenia: 32753
13
komentarze: 2 | wyświetlenia: 22958
12
komentarze: 3 | wyświetlenia: 29776
12
komentarze: 2 | wyświetlenia: 18504
11
komentarze: 2 | wyświetlenia: 33145
11
komentarze: 1 | wyświetlenia: 86389
11
komentarze: 1 | wyświetlenia: 10465
10
komentarze: 1 | wyświetlenia: 34967
10
komentarze: 5 | wyświetlenia: 20410
 
Autor
Artykuł

Powiązane tematy






Brak wiadomości


Dodaj swoją opinię
W trosce o jakość komentarzy wymagamy od użytkowników, aby zalogowali się przed dodaniem komentarza. Jeżeli nie posiadasz jeszcze swojego konta, zarejestruj się. To tylko chwila, a uzyskasz dostęp do dodatkowych możliwości!
 

© 2005-2018 grupa EIOBA. Wrocław, Polska