Zapis liczb binarnych ze
znakiem
W tej prezentacji:
Zapis Znak-Moduł (ZM)
Zapis uzupełnień do 1 (U1)
Zapis uzupełnień do 2 (U2)
Zapis Znak-Moduł (ZM)
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-1b b ... b2 b1 b0
n-2 n-3
bn-1 - bit znaku liczby
b ... b0 - bity modułu liczby
n-3
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.
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
Przykład 1
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 2
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)
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
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.
Wyznaczamy bit znaku. Liczba -9 jest ujemna, zatem b7
= 1 (najstarszy bit).
Wartość absolutna z -9 to 9 (po prostu opuszcza się
znak -).
Obliczamy zapis dwójkowy modułu 9(10) = 1001(2).
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.
Aączymy bit znaku 1 z bitami modułu 0001001 i
dostajemy zapis ZM liczby -9(10) = 10001001(ZM)
Zakres liczb w zapisie ZM
Zadanie polega na znalezieniu najmniejszej i
największej wartości liczby, którą da się przedstawić w
danym zapisie ZM. Aatwo 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
Zakres liczby w zapisie ZM
Zakres n bitowej liczby w kodzie ZM wynosi
Z(ZM) = <-2n-1 + 1, 2n-1 - 1>
Zapis U1
Drugim podejściem do rozwiązania problemu
liczb ze znakiem jest system uzupełnień do 1
zwany systemem U1 (ang. 1C - One's
Complement).
W systemie tym wszystkie bity zapisu liczby
posiadają swoje wagi (w ZM bit znaku nie
posiadał wagi).
Najstarszy bit jest bitem znaku i ma wagę równą
(-2n-1+1), gdzie n oznacza ilość bitów w zapisie
liczby.
Pozostałe bity posiadają wagi takie jak w
naturalnym systemie dwójkowym
Wartość dziesiętna liczby w zapisie U1
Wartość liczby U1 obliczamy zgodnie z
poznanymi zasadami - cyfry mnożymy przez
wagi pozycji, na których się znajdują i dodajemy
otrzymane iloczyny:
bn-1bn-2bn-3...b2b1b0 (U1) = bn-1(-2n-1+1) + bn-22n-2 + bn-32n-3 + ... +
b222 + b121 + b020
gdzie:
b - bit, cyfra dwójkowa 0 lub 1
n - liczba bitów w zapisie liczby
Przeliczanie liczb dziesiętnych
na zapis U1
Jeśli liczba jest dodatnia, to najstarszy bit znakowy
posiada wartość 0. Pozostałe bity służą do zapisu liczby
w naturalnym kodzie binarnym:
0111(U1) = 7(10),
0001(U1) = 1(10),
01111111(U1) = 127(10)
Jeśli liczba jest ujemna, to najstarszy bit znakowy ma
wartość 1. Pozostałe bity są negacjami bitów modułu
wartości liczby:
1101(U1) = (-2)(10) : moduł 2(10) = 010(2) : NOT 010 = 101
1100(U1) = (-3)(10) : moduł 3(10) = 011(2) : NOT 011 = 100
1010(U1) = (-5)(10) : moduł 5(10) = 101(2) : NOT 101 = 010
Procedura wyznaczania zapisu U1
dla liczby dziesiętnej
1.Jeśli liczba jest dodatnia, znajdujemy jej
reprezentację w naturalnym kodzie binarnym i
uzupełniamy bitami o wartości 0 do uzyskania
zadanej liczby bitów wymaganej przez przyjęty
format zapisu U1.
2.Jeśli liczba jest ujemna, obliczamy jej moduł.
Moduł przedstawiamy w naturalnym systemie
dwójkowym uzupełniając go bitami o wartości 0
do długości przyjętego formatu U1. Następnie
wszystkie bity zamieniamy na przeciwne i w
wyniku otrzymujemy zapis U1.
Przykład 1
Wyznaczyć 8-mio bitowy zapis U1 liczby
dziesiętnej 76.
Liczba 76 jest dodatnia, zatem wyznaczamy jej
zapis w naturalnym systemie dwójkowym:
76(10) = 1001100(2)
Otrzymaną liczbę dwójkową uzupełniamy bitami
o wartości 0 do długości formatu otrzymując:
76(10) = 01001100(U1)
Przykład 2
Wyznaczyć 8-mio bitowy zapis U1 liczby
dziesiętnej (-113).
Liczba (-113) jest ujemna. Jej moduł wynosi 113.
Wyznaczamy zapis dwójkowy modułu:
113(10) = 1110001(2)
Otrzymany zapis uzupełniamy bitami 0 do
długości 8 bitów.
Następnie negujemy wszystkie bity i otrzymujemy
w ten sposób zapis U1 liczby -113:
-113(10) = NOT 01110001 = 10001110(U1).
Zakres liczb w zapisie U1
Liczba U1 przyjmuje wartość największą dla bitu znaku
równego 0 i pozostałych bitów równych 1. Ponieważ
pozostałe bity przedstawiają w tym przypadku liczbę n-1
bitową w naturalnym kodzie dwójkowym, to dla n
bitowego kodu U1 otrzymujemy:
max(U1) = 2n-1 - 1.
Najmniejszą wartość liczba U1 przyjmuje dla bitu
znakowego równego 1 (waga ujemna) i pozostałych
bitów równych 0. Ponieważ w tym przypadku do wagi
bitu znakowego nic nie dodajemy, otrzymujemy:
min(U1) = -2n-1 + 1
Zakres liczb w zapisie U1
Zakres n bitowej liczby w kodzie U1 wynosi
Z(U1) = (-2n-1 + 1, 2n-1 - 1)
Zakres ten jest identyczny z zakresem liczb w
kodzie ZM.
Zapis U2
Zapis U1 posiada kilka niedogodności
(arytmetyka zmieniamy wagę bitu znakowego z
(-2n-1 + 1) na (-2n-1), gdzie n oznacza ilość bitów
w formacie kodu.
Wagi stają się teraz jednorodne - bit znakowy
posiada wagę ujemną, lecz o wartości
bezwzględnej takiej samej jak w naturalnym
kodzie dwójkowym.
Nowy kod nosi nazwę uzupełnień do podstawy 2
lub w skrócie U2 (ang. 2C - Two's Complement).
19
Wartość dziesiętna liczby
w zapisie U2
Wartość liczby U2 obliczamy zgodnie z poznanymi
zasadami - cyfry mnożymy przez wagi pozycji,
na których się znajdują i dodajemy otrzymane
iloczyny. Waga bitu znakowego jest ujemna.
bn-1bn-2bn-3...b2b1b0 (U2) = bn-1(-2n-1) + bn-22n-2 + bn-32n-3 +
... + b222 + b121 + b020
gdzie
b - bit, cyfra dwójkowa 0 lub 1
n - liczba bitów w zapisie liczby
Przykład
Najstarszy bit określa znak liczby. Jeśli jest równy 0, liczba jest
dodatnia i resztę zapisu możemy potraktować jak liczbę w
naturalnym kodzie dwójkowym.
01101011(U2) = 64 + 32 + 8 + 2 + 1 = 107(10).
Jeśli bit znaku ustawiony jest na 1, to liczba ma wartość ujemną. Bit
znaku ma wagę (-2n-1), gdzie n oznacza liczbę bitów w wybranym
formacie U2. Reszta bitów jest zwykłą liczbą w naturalnym kodzie
dwójkowym. Wagę bitu znakowego i wartość pozostałych bitów
sumujemy otrzymując wartość liczby U2:
11101011(U2) = (-27) + 64 + 32 + 8 + 2 + 1 = -128 + 107 = (-
21)(10).
Zwróć uwagę, iż postać ujemna liczby U2 nie jest już tak czytelna
dla nas jak w przypadku kodów ZM (tylko zmiana bitu znaku) i U1
(negacja wszystkich bitów).
przeliczanie ujemnej liczby dziesiętnej na zapis
U2 sposób 1
Liczba ujemna musi mieć ustawiony na 1 bit znaku. Zatem nasze
zadanie sprowadza się do znalezienia wartości pozostałych bitów.
Bit znaku stoi na pozycji o wadze (-2n-1), n - ilość bitów w formacie
U2. Pozostałe bity zapisu liczby tworzą naturalny od dwójkowy.
Wartość tego kodu musi być taka, aby po dodaniu jej do wagi
pozycji znakowej otrzymać wartość kodowanej liczby. Zapiszmy to
w formie równania:
kodowana liczba = waga bitu znakowego + wartość kodu pozostałych bitów
kodowana liczba = (-2n-1) + wartość kodu pozostałych bitów
stąd
wartość kodu pozostałych bitów = 2n-1 + kodowana liczba
Po wyznaczeniu wartości tego kodu tworzymy jego zapis w
systemie dwójkowym, uzupełniamy w miarę potrzeby bitem 0 do
długości formatu U2 - 1 i dodajemy bit znakowy 1. Konwersja jest
gotowa
Przykład
Wyznaczyć 8-mio bitowy kod U2 dla liczby
dziesiętnej (-45)(10).
Wyznaczamy moduł wagi pozycji znakowej. Dla
n = 8, 2n-1 = 27 = 128
wartość kodu pozostałych bitów = 128 + (-45) = 83 =
1010011(2)
Dodajemy bit znaku równy 1 i otrzymujemy:
(-45)(10) = 11010011
przeliczanie ujemnej liczby dziesiętnej na zapis
U2 sposób 2
Jeśli do liczby 2n (n - ilość bitów w formacie U2)
dodamy przetwarzaną liczbę dziesiętną, to w
wyniku otrzymamy wartość kodu dwójkowego
równoważnego bitowo (tzn. o takiej samej
postaci) kodowi U2 przetwarzanej liczby.
Wynik dodawania wystarczy zapisać w postaci
naturalnego kodu dwójkowego i konwersja jest
zakończona.
Przykład
Wyznaczyć 8-mio bitowy kod U2
dla liczby dziesiętnej (-45)(10).
28 + (-45) = 256 - 45 = 211 =
11010011(2).
Stąd (-45)(10) = 11010011(U2).
Zakres liczb w zapisie U2
Największa liczba U2 powstaje dla bitu znaku równego
0, a pozostałych bitów równych 1. Ponieważ pozostałe
bity przedstawiają wartość w naturalnym kodzie
binarnym i jest ich n-1, to
max(U2) = 2n-1 - 1
Z kolei najmniejszą wartość liczby U2 otrzymamy dla bitu
znaku równego 1, a pozostałych bitów równych 0. W tym
przypadku wartość liczby jest równa wadze pozycji
znakowej, czyli
min(U2) = (-2n-1)
Zakres liczb w zapisie U2
Zakres n bitowej liczby w kodzie U2 wynosi
Z(U2) = (-2n-1, 2n-1 - 1)
W porównaniu z systemami ZM i U1, zakres liczb U2 jest
niesymetryczny - liczb ujemnych jest o jedną więcej niż
liczb dodatnich
Wyszukiwarka
Podobne podstrony:
liczby ze znakiemF1 81 Zapis liczb ze znakiempdf zadania ze znakiem zapytania docxGrecy nie chcą nowych dowodów ze znakiem szatanaF1 85A Nadmiar przy dodawaniu liczb ze znakiem9 01 07 drzewa binarnecanelloni ze szpinakiem i marchewkaO zbudz sie wreszcie i ze snu powstanMÓJ PLAYEREK ZE STRONY GŁÓWNEJwięcej podobnych podstron