Wstep do Informatyki

Komentarze

Transkrypt

Wstep do Informatyki
Wstep
˛ do Informatyki
dr hab. Bożena Woźna-Szcześniak, prof. AJD
[email protected]
Jan Długosz University, Poland
Wykład 4
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
1 / 31
DZIELENIE LICZB BINARNYCH
Dzielenie można przeprowadzić wykorzystujac
˛ nastepuj
˛ ace
˛ metody:
metoda porównawcza,
metoda nierestytucyjna,
metoda restytucyjna.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
2 / 31
DZIELENIE LICZB BINARNYCH - metoda
porównawcza
Metoda porównawcza jest stosowana w zapisie znak moduł (ZM) i gdy
jest spełniony warunek A < B, gdzie:
A - dzielna,
B - dzielnik.
Niech:
r0 - reszta poczatkowa
˛
Rn = rn · 2−n - reszta z dzielenia
rn - n-ta reszta cz˛eściowa
Q - iloraz uzyskany w algorytmie o bitach qi .
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
3 / 31
DZIELENIE LICZB BINARNYCH - metoda
porównawcza
Polega na porównywaniu dzielnika z n–ta˛ reszta.
˛
1.Jeżeli przesunieta
˛ reszta cz˛eściowa jest wieksza
˛
lub równa od
dzielnika (r >= B), to:
– kolejny bit ilorazu qi ustawiamy na 1 (tj. qi = 1),
– odejmujemy dzielnik od tej reszty.
2.Jeżeli przesunieta
˛ reszta cz˛eściowa jest mniejsza od dzielnika
(r < B), to kolejny bit ilorazu qi = 0.
3.Dokonujemy przesuniecia
˛
otrzymanego wyniku o jedno miejsce w
lewo i przechodzimy do punktu pierwszego.
Wynikiem dzielenia jest iloraz Q o bitach q0 q1 ...qi .
W pierwszym kroku porównujemy reszte˛ poczatkow
˛
a˛ r0 (tzn. A
zapisana˛ na tylu pozycjach co B) z dzielnikiem.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
4 / 31
METODA PORÓWNAWCZA – przykład 1
Podzielić
A=−
25
= 1.0011001(ZM)
128
przez
B=
5
= 0.0101(ZM) .
16
Warunek A < B jest spełniony.
Porównujemy kolejne reszty cz˛eściowe z modułem dzielnika.
Oczekiwany wynik:
−
25
5
25 16
5
:
=−
·
= − = 1.101(ZM)
128 16
128 5
8
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
5 / 31
METODA PORÓWNAWCZA – przykład 1
⇐
r0
.0011001
r1
.011001
r1 − B
r1 > B
q1 = 1
.011001
−
⇐
⇐
B = 0.0101(ZM)
.010100
Bit znaku:
.000101
r2
.00101
r2 < B
.00101
r3
.0101
r3 = B
r3 − B
−
A = 1.0011001(ZM)
q0 = a0 ⊕ b0
q2 = 0
q0 = 1
q3 = 1
.0101
Q = q0 .q1 q2 q3
.0101
A
= 1.101
B
.0000
r4
.0000
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
6 / 31
METODA PORÓWNAWCZA – przykład 2
Podzielić
A=−
3
= 1.0000011(ZM)
128
przez
B=
9
= 0.1001(ZM) .
16
Warunek A < B jest spełniony.
Porównujemy kolejne reszty cz˛eściowe z modułem dzielnika.
Oczekiwany wynik:
−
3
9
3 16
1
:
=−
·
=−
≈ 1.00001(ZM)
128 16
128 9
24
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
7 / 31
METODA PORÓWNAWCZA – przykład 2
⇐
r0
.0000011
r1
.0000110
r1 < B
⇐
q1 = 0
r2
q2 = 0
r3
r4
r5
r5 ≥ B
⇐
q0 = a0 ⊕ b0
q3 = 0
q0 = 1
.0110000
r4 < B
⇐
Bit znaku:
.0011000
r3 < B
⇐
B = 0.1001(ZM)
.0001100
r2 < B
⇐
A = 1.0000011(ZM)
q4 = 0
Q = q0 .q1 q2 q3 q4 q5
q5 = 1
A
= 1.00001
B
.1100000
r5 − B
−
=
.11000
.10010
.00110
r6
.0110
Bożena Woźna-Szcześniak (AJD)
Reszta : 0.011 · 2−6
Wstep
˛ do Informatyki
Wykład 4
8 / 31
METODA NIERESTYTUCYJNA
Jest to metoda dzielenia dwóch liczb zapisanych w kodzie U2.
Aby można było ja˛ zastosować, moduł dzielnej musi być mniejszy od
modułu dzielnika (|A| < |B|)
1. Metoda ta polega na badaniu znaku dzielnika i kolejnej reszty
cz˛eściowej. Pierwsza reszta cz˛eściowa jest równa dzielnej.
Jeżeli znaki sa˛ zgodne to odejmujemy dzielnik od przesunietej
˛ w
lewo kolejnej reszty cz˛eściowej; kolejny bit ilorazu qi = 1.
Jeżeli znaki sa˛ różne to dodajemy dzielnik do przesunietej
˛ w lewo
kolejnej reszty cz˛eściowej; kolejny bit ilorazu qi = 0.
2. Powtarzamy punkt 1, aż do momentu, gdy kolejna reszta cz˛eściowa
bedzie
˛
równa 0.
3. Do otrzymanego wyniku dodajemy poprawk˛e równa:
˛ −1 + 2−n ,
gdzie n oznacza n–ta˛ reszte˛ z dzielenia.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
9 / 31
METODA NIERESTYTUCYJNA - przykład 1
Podziel A przez B, gdzie
A=−
15
= 1.1110001(U2)
128
3
= 0.011(U2)
8
Warunek |A| < |B| jest spełniony.
B=
Oczekiwany wynik:
−
Bożena Woźna-Szcześniak (AJD)
15 3
15 8
5
: =−
· =−
128 8
128 3
16
Wstep
˛ do Informatyki
Wykład 4
10 / 31
METODA NIERESTYTUCYJNA – przykład 1
⇐ r0
B(+); r1 (−)
⇐ r2
B(+); r3 (+)
⇐ r4
B(+); r5 (−)
⇐ r6
B(+); r7 (+)
r0
r1
r2
r3
r4
r5
r6
r7
r8
1.1110001
1.110001
r1 + B
1.110001 + 0.011000
0.001001
0.01001
r3 − B
0.01001 + 1.10100
1.11101
1.1101
r5 + B
1.1101 + 0.0110
0.0011
0.011
r7 − B
0.011 − 0.011
0.000
Bożena Woźna-Szcześniak (AJD)
A = 1.1110001(U2)
B = 0.0011(U2)
q1 = 0
Bit znaku: q1 = 0
q2 = 1
q3 = 0
q4 = 1
Wstep
˛ do Informatyki
Pseudo iloraz:
Q = q1 .q2 q3 q4 =
= 0.101(U2)
Poprawka:
−1 + 2−4 = − 15
16 =
= 1.0001(U2)
Ostatecznie:
0.101 + 1.0001 =
= 1.1011
Wykład 4
11 / 31
METODA NIERESTYTUCYJNA - przykład 2
Podziel A przez B, gdzie
A=−
15
= 1.1100111(U2)
128
5
= 1.0110000(U2)
8
Warunek |A| < |B| jest spełniony.
B=−
Oczekiwany wynik:
−
Bożena Woźna-Szcześniak (AJD)
5
25 8
5
25
: (− ) =
· =
128
8
128 5
16
Wstep
˛ do Informatyki
Wykład 4
12 / 31
METODA NIERESTYTUCYJNA – przykład 2
⇐ r0
B(−); r1 (−)
⇐ r2
B(−); r3 (+)
⇐ r4
B(−); r5 (−)
⇐ r6
r0
r1
r6
1.1100111
1.1001110
r1 + (−B)
1.100111 + 0.1010
0.001111
0.011110
r3 + B
0.011110 + 1.0110
1.110110
1.10110
r3 + (−B)
1.10110 + 0.1010
0.01010
r7
0.1010
r2
r3
r4
r5
B(−); r7 (+)
Bożena Woźna-Szcześniak (AJD)
r7 + B
0.1010 + 1.0110
0.0000
q1 = 1
A = 1.1100111(U2)
B = 1.0110000(U2)
Bit znaku: q1 = 1
q2 = 0
q3 = 1
q4 = 0
Wstep
˛ do Informatyki
Pseudo iloraz:
Q = q1 .q2 q3 =
= 1.010(U2)
Poprawka:
−1 + 2−4 = − 15
16 =
= 1.0001(U2)
Ostatecznie:
1.010 + 1.0001 =
5
= 0.0101(U2) = 16
Wykład 4
13 / 31
WARTOŚĆ LICZBY Z NADMIAREM
Dotychczas poznane kody liczb binarnych nie pozwalaja˛ na
uszeregowanie w porzadku
˛
rosnacym
˛
słów kodowych. Dlaczego?
Rozważmy nastepuj
˛ acy
˛ przykład słów kodowych 3 bitowych. Wówczas
słowa kodowe kolejnych liczb musiałyby sie˛ układać nastepuj
˛ aco:
˛
000,
001, 010, 011, 100, 101, 110, 111, gdze słowo kodowe 000 powinno
określać liczbe˛ najmniejsza,
˛ a słowo kodowe 111 liczbe˛ najwieksz
˛
a.
˛
Ale zarówno poznany już kod znak-moduł, jak i kod U2 na to nie
pozwalaja:
˛
kod
000 001 010 011 100 101 110 111
ZM
0
1
2
3
0
−1
−2
−3
U2
0
1
2
3
−4
−3
−2
−1
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
14 / 31
WARTOŚĆ LICZBY Z NADMIAREM
Niech wartość binarna słowa kodowego bedzie
˛
równa kodowanej
liczbie pomniejszonej o pewna˛ stała˛ zwana˛ nadmiarem (ang. excess
lub bias). W zależności od tej stałej słowa kodowe bed
˛ a˛ oznaczały
różne liczby, np.:
kod
000
001
010
011
100
101
110
111
Bożena Woźna-Szcześniak (AJD)
4
-4
-3
-2
-1
0
1
2
3
Wartość nadmiaru – BIAS
3 2 1 0 -1 -2
-3 -2 -1 0 1 2
-2 -1 0 1 2 3
-1 0 1 2 3 4
0 1 2 3 4 5
1 2 3 4 5 6
2 3 4 5 6 7
3 4 5 6 7 8
4 5 6 7 8 9
Wstep
˛ do Informatyki
-3
3
4
5
6
7
8
9
10
Wykład 4
15 / 31
WARTOŚĆ LICZBY Z NADMIAREM
UWAGA:
W zależności od nadmiaru możemy otrzymywać różne zakresy
kodowanych liczb.
Przykładowo dla przedstawionego w tabeli 3 bitowego kodu i
nadmiaru 4 otrzymujemy zakres od -4 do 3.
Nadmiar można tak dobrać, aby zakres w całości zawierał sie˛ po
stronie liczb ujemnych lub dodatnich.
Przykładowo dla przedstawionego w tabeli 3 bitowego kodu i
nadmiaru -3 otrzymujemy zakres od 3 do 10.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
16 / 31
WARTOŚĆ LICZBY Z NADMIAREM - definicja
Wartość dziesietna
˛
liczby zapisanej w dwójkowym kodzie z nadmiarem
bn−1 bn−2 . . . b2 b1 b0
(BIAS)
=
= bn−1 · 2n−1 + bn−2 · 2n−2 + . . . + b2 · 22 + b1 · 21 + b0 · 20 − BIAS,
gdzie
bi - i-ty bit, cyfra dwójkowa 0 lub 1
n - liczba bitów w zapisie liczby
bias - nadmiar, odchyłka w stosunku do naturalnych wartości
słów
kodowych.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
17 / 31
KODOWANIE Z NADMIAREM - PRZYKŁAD 1
Dla kodu z nadmiarem BIAS = 129(10) oblicz wartość słowa kodowego
11111111(BIAS=129) .
11111111(BIAS=129) = 27 + 26 + 25 + 24 + 23 + 22 + 21 + 20 − 129 =
= 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 − 129 =
= 255 − 129 =
= 126(10) .
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
18 / 31
KODOWANIE Z NADMIAREM - PRZYKŁAD 2
Dla kodu z nadmiarem BIAS = 63(10) oblicz wartość słowa kodowego
00011111(BIAS=63) .
00011111(BIAS=63) = 24 + 23 + 22 + 21 + 20 − 63 =
= 16 + 8 + 4 + 2 + 1 − 63 =
= 31 − 63 =
= (−32)(10) .
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
19 / 31
Przeliczanie liczb dziesietnych
˛
na liczby z nadmiarem
Procedura przeliczania liczby dziesietnej
˛
na dwójkowy zapis z
nadmiarem
1. Do wartości liczby dziesietnej
˛
dodaj nadmiar bias. Otrzymasz w
ten sposób wartość dziesietn
˛ a˛ binarnego zapisu liczby w systemie
dwójkowym z nadmiarem.
2. Obliczona˛ wartość słowa kodowego przelicz na system dwójkowy.
3. Wynikowe słowo binarne uzupełnij bitami o wartości 0 do długości
formatu.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
20 / 31
Przeliczyć liczbe˛ dziesietn
˛ a˛ 95(10) na zapis w
8-bitowym kodzie z nadmiarem 129(10)
Obliczamy wartość dziesietn
˛ a˛ słowa kodowego:
95 + 129 = 224
Otrzymana˛ wartość słowa kodowego przeliczamy na system
dwójkowy:
224(10) = 11100000(2)
95(10) = 11100000(BIAS=129)
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
21 / 31
Przeliczyć liczbe˛ dziesietn
˛ a˛ (−24)(10) na zapis w
8-bitowym kodzie z nadmiarem 129(10)
Obliczamy wartość dziesietn
˛ a˛ słowa kodowego:
(−24) + 129 = 105
Otrzymana˛ wartość słowa kodowego przeliczamy na system
dwójkowy:
105(10) = 1101001(2)
(−24)(10) = 01101001(BIAS=129)
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
22 / 31
Zakres liczb z nadmiarem
Słowa kodowe tworza˛ ciag
˛ rosnacy
˛ w naturalnym systemie binarnym.
Najmniejszym co do wartości słowem kodowym jest 0 . . . 0:
min(BIAS) = 0...0(BIAS) = 0 − BIAS,
a najwiekszym
˛
1 . . . 1:
max(BIAS) = 1...1(BIAS) = 2n − 1 − BIAS.
Zatem zakres n bitowej liczby dwójkowej w kodzie z nadmiarem bias
Z(BIAS) = h−BIAS; 2n − 1 − BIASi
Zakres ten może być dowolnie przesuwany na osi liczbowej poprzez
zmiane˛ odchylenia. Dzieki
˛ temu zawsze można go dopasować do
bieżacych
˛
potrzeb obliczeniowych
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
23 / 31
ZADANIE 1 - Jakie zakresy posiadaja:
˛
4 bitowe liczby w kodzie z nadmiarem BIAS = 8 = 23
< 0000(BIAS=8) , 1111(BIAS=8) >=< −8, 7 >
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
24 / 31
ZADANIE 1 - Jakie zakresy posiadaja:
˛
4 bitowe liczby w kodzie z nadmiarem BIAS = 8 = 23
< 0000(BIAS=8) , 1111(BIAS=8) >=< −8, 7 >
8 bitowe liczby w kodzie z nadmiarem BIAS = 128 = 27
< 00000000(BIAS=128) , 11111111(BIAS=128) >=< −128, 127 >
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
24 / 31
ZADANIE 1 - Jakie zakresy posiadaja:
˛
4 bitowe liczby w kodzie z nadmiarem BIAS = 8 = 23
< 0000(BIAS=8) , 1111(BIAS=8) >=< −8, 7 >
8 bitowe liczby w kodzie z nadmiarem BIAS = 128 = 27
< 00000000(BIAS=128) , 11111111(BIAS=128) >=< −128, 127 >
16 bitowe liczby w kodzie z nadmiarem BIAS = 32768 = 215
< 0000000000000000(BIAS=215 ) , 1111111111111111(BIAS=215 ) >
=< −32768, 32767 >
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
24 / 31
Arytmetyka liczb z nadmiarem - Dodawanie
Kod binarny liczby w zapisie z nadmiarem ma wartość:
c(BIAS) = liczba + BIAS
Suma dwóch kodów da nam:
c1(BIAS) = liczba1 + BIAS
c2(BIAS) = liczba2 + BIAS
c1(BIAS) + c1(BIAS) = (liczba1 + liczba2 ) + 2 · BIAS
Prosta suma dwóch słów kodowych prowadzi do wyniku, który jest za
duży o wartość nadmiaru. Aby zatem otrzymać słowo kodowe
odpowiadajace
˛ sumie liczb, należy od wyniku dodawania odjać
˛
nadmiar:
c1+2(BIAS) = c1(BIAS) + c2(BIAS) − BIAS
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
25 / 31
Obliczyć 0011(BIAS=7) + 1010(BIAS=7)
0 0 1 1
+ 1 0 1 0
1 1 0 1
− 0 1 1 1
0 1 1 0
0011(BIAS=7) + 1010(BIAS=7) = 0110(BIAS=7)
Sprawdzenie:
0011(BIAS=7) = 3 − 7 = −4
1010(BIAS=7) = 10 − 7 = 3
0110(BIAS=7) = 6 − 7 = −1
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
26 / 31
Arytmetyka liczb z nadmiarem - Odejmowanie
Kod binarny liczby w zapisie z nadmiarem ma wartość:
c(BIAS) = liczba + BIAS
Różnica dwóch kodów da nam:
c1(BIAS) = liczba1 + BIAS
c2(BIAS) = liczba2 + BIAS
c1(BIAS) − c1(BIAS) = liczba1 − liczba2
Prosta różnica dwóch słów kodowych prowadzi do wyniku, który jest
za mały o wartość nadmiaru. Aby zatem otrzymać słowo kodowe
odpowiadajace
˛ różnicy liczb, należy do wyniku odejmowania dodać
nadmiar:
c1−2(BIAS) = c1(BIAS) − c2(BIAS) + BIAS
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
27 / 31
Obliczyć 1011(BIAS=7) − 1110(BIAS=7)
1 0 1 1
− 1 1 1 0
1
1 1 0 1
+ 0 1 1 1
1
0 1 0 0
1011(BIAS=7) − 1110(BIAS=7) = 0100(BIAS=7)
Sprawdzenie:
1011(BIAS=7) = 11 − 7 = 4
1110(BIAS=7) = 14 − 7 = 7
0100(BIAS=7) = 4 − 7 = −3
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
28 / 31
ZADANIA
Zad.1 Obliczyć wartość dzisietn
˛ a˛ liczb dwójkowych z nadmiarem:
a) 1101(BIAS=9)
b) 1110(BIAS=8)
c) 0011(BIAS=7)
d) 1001(BIAS=6)
e) 0110(BIAS=5)
f ) 1010(BIAS=4)
Zad.2 Przelicz liczby dziesietne
˛
na ich 4-bitowy kod binarny z
nadmiarem 6:
a)
5(10)
b) −5(10)
c)
8(10)
d)
e) −4(10)
3(10)
f ) −9(10)
Zad.3 Oblicz:
a) 0111(BIAS=8) + 1000(BIAS=8)
b) 1111(BIAS=5) + 0001(BIAS=5)
c) 0100(BIAS=9) + 1011(BIAS=9)
d) 0011(BIAS=7) − 1001(BIAS=7)
e) 1000(BIAS=6) − 1100(BIAS=6)
f ) 1010(BIAS=8) − 1001(BIAS=8)
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
29 / 31
Kodowanie znaków
Najbardziej popularnym standardem kodowania znaków jest kod
ASCII:
zapisuje znaki na 7 bitach
obejmuje kody od 0 do 127; np. wielkie litery alfabetu łacińskiego
odpowiadaja˛ kodom 65 –90, małe 97 –122, cyfry arabskie 48 –57
użycie pozostałego ósmego bitu bajta tworzy tzw. Extended
ACSII (rozszerzony kod ASCII)
Potrzeba reprezentacji innych znaków (np. narodowych znaków
diakrytycznych) spowodowała potrzebe˛ stworzenia dodatkowych
kodów.
Istnieje kilka standardów kodowania polskich znaków, najbardziej
popularne to: ISO-8859-2 (Latin-2) i Windows-1250.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
30 / 31
Kodowanie znaków
Współczesnym standardem kodowania znaków jest Unicode (UCS):
powstał jako próba ujednolicenia kodowania znaków różnych
jezyków
˛
w Internecie
pierwotnie składał sie˛ z 16 bitów
dzisiejszy standard UCS ISO 10646 operuje na 31-bitach
UCS obejmuje wszystkie podstawowe alfabety świata:
arabski,hebrajski, japoński, koreański, chiński
kody liter znaków diakrytycznych alfabetu łacińskiego znajduja˛ sie˛
w zakresie 256 –383 Unicode.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 4
31 / 31

Podobne dokumenty