3.3. Zapis liczb binarnych ze znakiem

advertisement
3.3. Zapis liczb binarnych ze znakiem
–
reszta
1
0
1
1
0
0
1
1
1
0
1
1
1
0
1
1
0
1
0
1
1
1
1-1
0
1
0
1
0
0
1
1
–
1
0
1
0
1
1
1
–
1
0
1
0
1
0
1
–
1
0
1
0
0
0
0
–
1
0
1
0
0
0
1
–
1
0
1
0
0
0
1
0
0
0
0
:
1
0
1
3.3. Zapis liczb binarnych ze znakiem
W systemie dziesiętnym liczby ujemne opatrzone są specjalnym znakiem graficznym,
tzw. minusem „–”, na przykład –6, –22 itd., a liczby dodatnie w niektórych przypadkach plusem „+”, na przykład +5, +20. W systemie binarnym opartym wyłącznie na
zerach i jedynkach brakuje dodatkowego znaku, który wskazywałby na ujemny lub
dodatni charakter określonej liczby.
Opracowano kilka metod zapisu liczb binarnych ze znakiem, które charakteryzują się
różnym stopniem przydatności, między innymi:
qq metodę znak-moduł (ZM),
qq metodę uzupełnień do 1 (U1),
qq metodę uzupełnień do 2 (U2).
3.3.1. Metoda znak-moduł (ZM)
W metodzie znak-moduł zastosowano prosty zabieg kodowania znaku za pomocą
najstarszej cyfry w liczbie binarnej. Najstarszą cyfrę określa się jako znak, pozostałe
cyfry są modułem reprezentującym daną liczbę binarną:
znak
an–1
moduł
an–2
…
a1
a0
51
urzadzenia_techniki_komputerowej.indb 51
2010-06-01 11:02:28
Rozdział 3 t Arytmetyka liczb binarnych
W celu obliczenia wartości naturalnej liczby binarnej ze znakiem należy posłużyć się
następującym wzorem:
Stosując powyższy (zmodyfikowany) zapis wielomianowy, możemy zauważyć, że znak
otrzymanej po obliczeniu liczby zależny jest od wyrażenia: 1–2*najstarsza cyfra liczby.
Jeżeli najstarsza cyfra jest jedynką, to wynikiem wyrażenia będzie „–1”; jeżeli zerem,
to otrzymamy „1”. Obliczony moduł należy przemnożyć przez wyrażenie znakowe,
dzięki czemu otrzyma się dodatnią lub ujemną liczbę dziesiętną będącą odpowiednikiem danej liczby binarnej.
Aby uzyskać liczbę binarną ze znakiem na podstawie liczby dziesiętnej, należy obliczyć moduł metodą dzielenia przez podstawę (2), a następnie dołączyć „0”, jeżeli chce
się mieć liczbę dodatnią, lub 1 — dla liczby ujemnej.
Przykłady:
0111(Z-M) = 0 12 11 10 = (1–2*0)*(1*22+1*21+1*20) = 1*(4+2+1) = 7D
1111(Z-M) = 1 12 11 10 = (1–2*1)*(1*22+1*21+1*20) = –1*(4+2+1) = –7D
Jedną z wad metody ZM jest brak możliwości prostego wykonywania operacji arytmetycznych, co znacznie ogranicza jej powszechne stosowanie:
1
1
1
0ZM
+
0
1
1
0ZM
1
0
1
0
0
–6D
+
6D
20D
Kolejną niedogodnością związaną z systemem znak-moduł jest to, że zero może zostać
zapisane na dwa sposoby: ze znakami plus i minus. Stanowi to przykład nieefektywności tej metody, w której tracony jest jeden wyraz kodowy.
3.3.2. Metoda uzupełnień do 2 (U2)
Niedoskonałości systemu ZM spowodowały, że konieczne było opracowanie bardziej
naturalnej metody zapisu liczb binarnych ze znakiem. Powstała metoda uzupełnień
do 2 (U2), gdzie cyfra określająca znak jest zintegrowana z liczba binarną, co pozwala
na wykonywanie obliczeń arytmetycznych.
W celu obliczenia wartości liczby binarnej z wykorzystaniem metody U2 należy zastosować poniższy wzór:
52
urzadzenia_techniki_komputerowej.indb 52
2010-06-01 11:02:28
3.3. Zapis liczb binarnych ze znakiem
W metodzie U2 wyrażenie znaku jest tak skonstruowane, że uczestniczy w wartości
liczby jak pozostałe pozycje. Wartość podstawy w wadze najstarszej liczby określającej
znak jest ujemna.
Przykłady:
0111B = 03 12 11 10 = 0*(–23)+1*(22)+1*(21)+1*(20) = 4+2+1 = 7B
1111B = 13 12 11 10 = 1*(–23)+1*(22)+1*(21)+1*(20) = –8+4+2+1 = –1B
Jak widać w przykładach, liczby binarne dodatnie i ujemne U2 wyglądają po przekształceniu na dziesiętne inaczej niż w przypadku metody ZM.
Przekształcenie ujemnej liczby dziesiętnej na postać binarną jest bardziej pracochłonne niż w metodzie ZM.
1. Na początku obliczamy postać binarną z wartości bezwzględnej dziesiętnej liczby
ujemnej:
5:2 = 2
r=1
2:2 = 1
r=0
1:2 = 0
r=1
–5D = |–5D| = 5D = 101B
2. Powstałą liczbę binarną należy uzupełnić zerami do liczby cyfr będących krotnością dwójki. W tym przypadku, gdy liczba binarna ma 3 cyfry, dopełniamy do 4.
Jeżeli byłoby 5 cyfr, należałoby uzupełnić do ośmiu itd.
0101B
3. Następnie należy zamienić wszystkie cyfry w liczbie binarnej na przeciwne, czyli
jedynki na zera i odwrotnie:
1010
4. W ostatnim etapie do powstałej liczby dodaje się binarną jedynkę — wynik jest
ujemną liczbą binarną:
+
1
0
1
0
0
0
0
1
1
0
1
1
13 02 11 10 = 1(–23)+0(22)+1(21)+1(20) = –8+3 = –5
53
urzadzenia_techniki_komputerowej.indb 53
2010-06-01 11:02:29
Rozdział 3 t Arytmetyka liczb binarnych
3.4. Liczby binarne stałoi zmiennoprzecinkowe
Podobnie jak w systemie dziesiętnym liczby binarne również mogą być zapisane w postaci ułamkowej. Zapis binarnych liczb pozycyjnych z przecinkiem może przyjąć postać stało- lub zmiennoprzecinkową.
3.4.1. Liczby stałoprzecinkowe (stałopozycyjne)
Liczby stałoprzecinkowe (ang. fixed-point numbers) umożliwiają zapis liczb w postaci ułamkowej, w którym pozycja przecinka ustalana jest arbitralnie w zależności od
wymaganej dokładności.
Binarną liczbę stałoprzecinkową można potraktować jako złożenie dwóch części —
liczby całkowitej oraz ułamkowej rozdzielonych przecinkami:
część całkowita
część ułamkowa
10110011,
0101
W celu przekształcenia binarnej liczby stałoprzecinkowej na postać dziesiętną należy
posłużyć się poniższym wzorem:
an-1 … a1 a0 , a-1 … a-m = an-1*2n-1+…+a1*21+a0*20+a-1*2-1+…+a-m*2-m
Wartości wag części ułamkowej przyjmują postać ułamków, gdzie dokładność określona jest przez wagę najmłodszej cyfry.
Przykłady:
1101,11B = 13 12 01 10, 1-1 1-2 = 1*23+1*22+0*21+1*20+1*2-1+1*2-2 = 8+4+1+½+¼ = 13,75D
11100101,1011 = 27+26+25+22+20+2-1+2-3+2-4 = 128+64+32+4+1+½+1/8+1/16 = 229,6875D
Zamianę liczby dziesiętnej na postać binarną przeprowadza się w dwóch etapach:
qq z amiana liczby całkowitej na postać binarną za pomocą cyklicznego dzielenia
przez 2;
qq z amiana części ułamkowej na postać binarną za pomocą cyklicznego mnożenia
przez 2. Jeżeli wynik jest ≥ 1, to wyznaczony bit części ułamkowej jest także równy 1. Do dalszych obliczeń wykorzystuje się część ułamkową wyniku.
Proces należy wykonywać aż do otrzymania 0. Z wyników iloczynów pobiera się wartości całkowite — ułamek liczby binarnej. Otrzymane liczby łączymy, przedzielając
część całkowitą i ułamkową przecinkiem. Jeżeli mnożenie przez 2 prowadzi do osiągnięcia nieskończenie długiej kombinacji zer i jedynek, należy przyjąć przybliżoną
dokładność, na przykład do 10 miejsc po przecinku.
54
urzadzenia_techniki_komputerowej.indb 54
2010-06-01 11:02:29
3.4. Liczby binarne stało- i zmiennoprzecinkowe
Przykład:
10,225
10 , 225
10:2 = 5
5:2 = 2
2:2 = 1
1:2 = 0
r=0
r=1
r=0
r=1
10D = 1010B
1. 0,225*2 = 0,45
2. 0,45*2 = 0,9
3. 0,9*2 = 1,8
4. 0,8*2 = 1,6
5. 0,6*2 = 1,2
6. 0,2*2 = 0,4
7. 0,4*2 = 0,8
8. 0,8*2 = 1,6
9. 0,6*2 = 1,2
10. 0,2*2 = 0,4
część całkowita 0
część całkowita 0
część całkowita 1
część całkowita 1
część całkowita 1
część całkowita 0
część całkowita 0
część całkowita 1
część całkowita 1
część całkowita 0
0,225D = 0,0011100110B
10,225D = 1010,0011100110B
3.4.2. Liczby zmiennoprzecinkowe
(zmiennopozycyjne)
W odróżnieniu od liczb stałoprzecinkowych liczby zmiennoprzecinkowe (ang. floating-point numbers — FP) umożliwiają obsługę większego zakresu liczb (bardzo małych lub bardzo dużych), jednak kosztem wolniejszego przetwarzania i mniejszej dokładności. Termin „zmiennoprzecinkowe” oznacza, że nie istnieje stała liczba cyfr
przed przecinkiem i po nim.
UWAGA
Komputery przetwarzają najczęściej liczby zmiennoprzecinkowe w przybliżeniu. Nieuwaga programisty podczas operowania na liczbach zmiennoprzecinkowych może
prowadzić do przekłamań w otrzymanych wynikach.
55
urzadzenia_techniki_komputerowej.indb 55
2010-06-01 11:02:29
Rozdział 3 t Arytmetyka liczb binarnych
Liczba zmiennoprzecinkowa składa się z dwóch części: liczby stałoprzecinkowej (ang.
mantissa — mantysa, m) oraz podstawy (p) podniesionej do potęgi, zwanej cechą lub
wykładnikiem (ang. exponent, e):
lFP = m*be
W celu zamiany zmiennoprzecinkowej liczby binarnej na postać dziesiętną należy ze
słowa kodu wydobyć cyfry cechy i mantysy (na przykład 1101 1010 — 4 cyfry cechy
i 4 mantysy):
cecha
mantysa
b6
b7
b5
b4
b3
b2
b1
b0
Za pomocą metody uzupełnień do 2 oblicza się wartość cechy:
e = b7(–23)+b622+b521+b420 = (–8)b7+4b6+2b5+b4
Mantysa jest najczęściej liczbą stałoprzecinkową z przedziału [1, 2). Oblicza się ją na
podstawie wzoru:
m = b3b2, b1b0 = b3(–21)+b220+b12-1+b02-2 = –2b3+b2+½b1+¼b2
Otrzymaną cechę i mantysę podstawia się do wzoru:
lFP = m*2e
Przykłady:
1111 1001FP
e = 1111U2
1111U2 = –8+4+2+1 = –1D
m = 10,01U2
10,01U2 = –2+¼ = –1,75D
lFP = m*2e = –1¾*2-1 = –7/4*½ = –0,875
11111001FP = –0,875D
0001 0100FP
e = 0001U2
0001U2 = 1D
m = 01,00U2
01,00U2 = 1D
lFP = m*2e = 1*21 = 1*2 = 2
00010100FP = 2D
Zamianę liczby dziesiętnej na postać binarną można wykonać, stosując metodę dla
liczb stałoprzecinkowych.
56
urzadzenia_techniki_komputerowej.indb 56
2010-06-01 11:02:29
3.4. Liczby binarne stało- i zmiennoprzecinkowe
Przykład:
13,7D
13:2 = 6
r=1
6:2 = 3
r=0
3:2 = 1
r=1
1:2 = 0
r=1
13D = 1101B
0,7*2 = 1,4
część całkowita 1
0,4*2 = 0,8
część całkowita 0
0,8*2 = 1,6
część całkowita 1
0,6*2 = 1,2
część całkowita 1
13,7D = 1101,1011B
ĆWICZENIA
1.Dokonaj konwersji liczb binarnych do postaci dziesiętnej z wykorzystaniem zapisu wielomianowego:
a. 11011011B
b. 10010011B
2.W celu sprawdzenia wyników pierwszego ćwiczenia liczby dziesiętne przekształć na liczby binarne za pomocą cyklicznego dzielenia przez podstawę.
3.Dokonaj konwersji liczb szesnastkowych do postaci dziesiętnej z wykorzystaniem zapisu wielomianowego:
a. F3AH
b. 952H
4.W celu sprawdzenia wyników z pierwszego ćwiczenia liczby dziesiętne
przekształć na liczby binarne za pomocą cyklicznego dzielenia przez
podstawę.
5.Dokonaj konwersji liczby binarnej 1011011011B do postaci szesnastkowej
z wykorzystaniem zapisu wielomianowego.
57
urzadzenia_techniki_komputerowej.indb 57
2010-06-01 11:02:29
Rozdział 3 t Arytmetyka liczb binarnych
ĆWICZENIA ciąg dalszy
6.Wykonaj działania arytmetyczne na liczbach binarnych:
a.
1
1
0
1
1
0
1
1
?
?
?
?
1
1
0
0
1
0
1
1
?
?
?
?
1
1
0
1
1
0
1
0
?
?
?
?
?
?
?
0
1
1
:
1
+
b.
–
c.
×
d.
1
0
7.Przekształć liczby binarne ze znakiem do postaci dziesiętnej za pomocą
kodu U2:
a. 0101B
b. 1101B
8.Przekształć dziesiętną liczbę –7D do postaci binarnej.
9.Przekształć binarną liczbę stałoprzecinkową 1001,11B do postaci dziesiętnej.
10. Przekształć ułamkową liczbę dziesiętną 17,6D do postaci binarnej.
58
urzadzenia_techniki_komputerowej.indb 58
2010-06-01 11:02:29
3.4. Liczby binarne stało- i zmiennoprzecinkowe
Pytania i polecenia kontrolne
1. Wymień pozycyjne systemy liczbowe.
2. Opisz sposoby konwersji liczb heksadecymalnych na binarne i binarnych na
heksadecymalne.
3. Co to jest tabliczka dodawania i odejmowania liczb binarnych?
4. Jakie niedoskonałości skrywa metoda znak-moduł?
5. Jakie niebezpieczeństwo pojawia się przy zaokrąglaniu binarnych liczb
zmiennoprzecinkowych?
59
urzadzenia_techniki_komputerowej.indb 59
2010-06-01 11:02:29
Download