Informatyka kodowanie liczb

advertisement
Informatyka
kodowanie liczb
dr hab. inż. Mikołaj Morzy
plan wykładu
definicja informacji
sposoby kodowania
reprezentacja liczb naturalnych i całkowitych
arytmetyka binarna
arytmetyka oktalna
arytmetyka heksadecymalna
czym jest informacja?
informacja (łac. informatio) wyobrażenie, idea, wielkość
abstrakcyjna przechowywana w pewnych obiektach,
przesyłana między obiektami, przetwarzana w obiektach i
stosowana do sterowania obiektami. Obiektami mogą być
organizmy żywe, urządzenia techniczne oraz systemy
takich obiektów.
prof. Antoni Mazurkiewicz
informacja to powiadamianie społeczeństwa lub
określonych zbiorowości w sposób zobiektywizowany,
systematyczny i konkretny za pomocą środków
masowego przekazu
encyklopedia PWN
mierzenie i badanie informacji
informacją zajmuje się dyscyplina naukowa zwana Teorią
Informacji (ang. Information Theory)
stworzona przez Claude'a Shannona w 1948 roku
bada inherentne ograniczenia przetwarzania sygnałów
dziedziny: kompresja danych, przechowywanie i komunikacja
danych, wnioskowanie statystyczne, NLP, kryptografia
mierzy informację ilościowo i jakościowo
aby zaistniała informacja, konieczna jest możliwość porównania
dwóch stanów, brak zmian oznacza brak informacji
jednostki informacji
maszyny przechowują dane w postaci liczb binarnych
bit (b): pojedyncza cyfra reprezentuje dwa stany: 0 i 1, jest to
najmniejsza niepodzielna jednostka informacji cyfrowej
bity grupuje się w bajty (B), najczęściej 1B=8b
nazwa
wartość
użycie
nazwa
kilobajt (kB)
103
210
kibibajt (KiB)
megabajt (MB)
106
220
mebibajt (MiB)
gigabajt (GB)
109
230
gibibajt (GiB)
terabajt (TB)
1012
240
tebibajt (TiB)
petabajt (PB)
1015
250
pebibajt (PiB)
eksabajt (EB)
1018
260
eksbibajt (EiB)
zettabajt (ZB)
1021
270
zebibajt (ZiB)
jottabajt (YB)
1024
280
jobibajt (YiB)
pozycyjny system liczbowy
pozycyjny system liczbowy to para
(q; C ) q ≥ 2, C = {0,1, K, q − 1}
q nazywamy podstawą systemu
C jest zbiorem dozwolonych cyfr
Liczba jest przedstawiana jako ciąg cyfr
w systemie pozycyjnym wartość cyfry zależy od miejsca w ciągu
w systemie wagowym każdej pozycji przypisana jest inna waga
n
L = ∑ ci q
i =m
i
ci ∈ C , m ≤ 0, n ≥ 0, m ≤ n
przykłady
system dziesiętny: 5703,32(10)
3
L = ∑ ci 10i
2 ⋅10 − 2 + 3 ⋅10 −1 + 3 ⋅100 + 0 ⋅101 + 7 ⋅10 2 + 5 ⋅103
i = −2
system binarny: 110101(2)
5
L = ∑ ci 2i 1⋅ 20 + 0 ⋅ 21 + 1⋅ 2 2 + 0 ⋅ 23 + 1⋅ 2 4 + 1⋅ 25 = 53(10)
i =0
system heksadecymalny: 31BD(16)
3
L = ∑ val (ci )16i 13 ⋅160 + 11⋅161 + 1 ⋅16 2 + 3 ⋅163 = 12733(10)
i =0
wybrane wartości dziesiętne
w systemie binarnym
zapis w systemie binarnym
wartość w systemie dziesiętnym
1
20=1
10
21=2
100
22=4
1000
23=8
10000
24=16
100000
25=32
1000000
26=64
10000000
27=128
100000000
28=256
1000000000
29=512
10000000000
210=1024
konwersja liczb dziesiętnych
do systemu binarnego
algorytm
dziel liczbę dziesiętną przez 2 zapamiętując reszty z dzielenia
zapisz reszty w odwrotnej kolejności
liczba dziesiętna
wynik dzielenia
reszta
2436
1218
0
1218
609
0
609
304
1
304
152
0
152
76
0
76
38
0
38
19
0
19
8
1
8
4
0
4
2
0
2
1
0
1
0
1
2436(10)=100010000100(2)
ćwiczenie samodzielne
skonwertuj do postaci binarnej liczbę 4813(10)
liczba dziesiętna
wynik dzielenia
reszta
4813
2406
1
2406
1203
0
1203
601
1
601
300
1
300
150
0
150
75
0
75
37
1
37
18
1
18
9
0
9
4
1
4
2
0
2
1
0
1
0
1
4813(10)=1001011001101(2)
zamiana ułamka dziesiętnego na binarny
algorytm
przemnóż całą liczbę przez 2
zapamiętaj część całkowitą, a część ułamkową przemnóż
ponownie przez 2
kontynuuj aż część ułamkowa będzie równa 0
zapisz części całkowite
liczba
iloczyn
cz. całkowita
cz. ułamkowa
0.71875
1.4375
1
0.4375
0.4375
0.875
0
0.875
0.875
1.75
1
0.75
0.75
1.5
1
0.5
0.5
1.0
1
0
0.71875(10)=0.10111(2)
ćwiczenie samodzielne
skonwertuj do postaci binarnej liczbę 0.28125(10)
liczba
iloczyn
cz. całkowita
cz. ułamkowa
0.28125
0.5625
0
0.5625
0.5625
1.125
1
0.125
0.125
0.25
0
0.25
0.25
0.5
0
0.5
0.5
1.0
1
0
0.28125(10)=0.01001(2)
zwiększanie liczby binarnej o 1
algorytm
wskaż najmniej znaczący bit liczby
powtarzaj następującą sekwencję kroków
jeśli wskazany bit jest równy 0, to ustaw bit na 1 i zakończ algorytm
jeśli wskazany bit jest równy 1, to ustaw bit na 0 i wskaż następny
znaczący bit, jeśli wskazany bit jest najbardziej znaczącym bitem liczby,
to dodaj 1 na początku liczby i zakończ algorytm
liczba 10011(2)=19(10)
liczba 01111(2)=15(10)
10011
01111
10010
01110
10000
01100
10100 = 20(10)
01000
00000
10000 = 16(10)
porównywanie liczb binarnych
algorytm
jeśli liczby są różnej długości, to dłuższa liczba jest większa
jeśli liczby są równej długości, to porównaj liczby bit po bicie
od najbardziej znaczącego bitu
jeśli oba bity są takie same, to przejdź do kolejnego bitu
jeśli bity są różne, to większą liczbą jest ta, która ma na danej pozycji 1
liczba
znak
liczba
1011010
>
1010010
1111000
<
1111010
10000
>
1111
111100
?
101100
101010
?
101011
100111
?
111000
podstawowe operacje arytmetyczne
w układzie binarnym
dodawanie i mnożenie
+
0
1
*
0
1
0
0
1
0
0
0
1
1
10
1
0
1
algorytm dodawania
dwie liczby binarne akak-1…a1a0 i bkbk-1…b1b0
dla każdej pozycji obliczamy bit sumy si i bit przeniesienia ci
s0 = (a0 + b0 ) mod 2 c0 = a0 *b 0
kolejne bity, od i-tego do k-tego obliczamy według wzoru
si = (ai + bi + ci −1 ) mod 2
bit przeniesienia ci jest ustawiany na 1 jeśli co najmniej dwie zmienne
spośród ai, bi, ci-1 są ustawione na 1
dodawanie liczb binarnych : przykład
1
0
+
1
21(10)
1
1
1
7(10)
1
1
0
0
28(10)
1
1
1
1
1
31(10)
1
0
0
0
8(10)
0
0
1
1
1
39(10)
1
0
1
0
1
21(10)
1
1
0
1
13(10)
0
0
1
0
34(10)
+
1
0
1
+
1
1
0
zadanie samodzielne
dodaj binarnie liczby 1001(2) i 1001(2)
+
1
1
0
0
1
9(10)
1
0
0
1
9(10)
0
0
1
0
18(10)
odejmowanie liczb binarnych
algorytm
odejmuj liczby bit po bicie od najmniej znaczącego bitu
jeśli odjemnik jest większy od odjemnej, "pożycz" dwa bity z
kolejnej bardziej znaczącej pozycji
1
2
2
2
0
1
0
1
21(10)
1
1
1
7(10)
0
1
1
1
0
14(10)
1
1
1
1
1
31(10)
1
0
0
0
8(10)
0
1
1
1
23(10)
1
zadanie samodzielne
odejmij binarnie liczby 10101(2) i 1101(2)
1
0
2
0
1
0
1
2110)
1
1
0
1
13(10)
1
0
0
0
8(10)
mnożenie i dzielenie przez 2
algorytm
aby pomnożyć liczbę przez 2, przesuń wszystkie bity w lewo o
jedną pozycję, a na ostatniej pozycji umieść 0
aby podzielić bez reszty liczbę przez 2, przesuń wszystkie bity
w prawo o jedną pozycję, tracąc najmniej znaczący bit
1
0
1
0
*
1
1
21(10)
2
0
1
0
1
0
42(10)
1
1
0
0
1
25(10)
÷
2
1
1
0
0
12(10)
wady układu binarnego
mimo licznych zalet, układ binarny posiada wady
zapis dużej liczby zajmuje dużo więcej miejsca niż w przypadku
zapisu dziesiętnego
zapis binarny jest wygodny w odniesieniu do liczb naturalnych,
dla liczb rzeczywistych lub ujemnych zapis się komplikuje
system ósemkowy (oktalny)
podstawą systemu jest liczba 8
liczby zapisywane są przy użyciu cyfr 0, 1, …, 7
system oktalny jest pozycyjnym systemem wagowym, w
którym poszczególne pozycje mają wartość 1, 8, 64, 512,
4096, …
system oktalny trzykrotnie skraca zapis liczby binarnej
współcześnie system oktalny wychodzi z użycia
system szesnastkowy (heksadecymalny)
podstawą systemu jest liczba 16
liczby zapisywane są za pomocą cyfr 0, 1, …, 9 i liter A, B,
C, D, E, F
literom odpowiadają liczby A(10), B(11), C(12), …, F(15)
kod heksadecymalny bardzo łatwo konwertuje się do
kodu binarnego
1100 0010 1010 0111 (2) = C2A7 (16)
12(10)=C(16)
10(10)=A16)
2(10)=2(16)
7(10)=7(16)
dodawanie liczb heksadecymalnych
dodawanie metodą pośrednią (przez kod dziesiętny)
28F(16)
2*256+8*16+15*1
655(10)
+ 37F(16)
3*256+7*16+16*1
+895(10)
60E(16)
6*256+0*16+14*1
1550(10)
dodawanie bezpośrednie
F(16)+F(16)=15(10)+15(10)=30(10)
30(10):16(10)=1 reszta 14(10)=1 reszta E(16)
1+8(16)+7(16)=1+8(10)+7(10)=16(10)
16(10):16(10)=1 reszta 0(10)=1 reszta 0(16)
1+2(16)+3(16)=1+2(10)+3(10)=6(10)
6(10):16(10)=0 reszta 6(10)=0 reszta 6(16)
zadanie samodzielne
dodaj heksadecymalnie liczby AF(16) i 87(16)
F(16)+7(16)=15(10)+7(10)=22(10)
22(10):16(10)=1 reszta 6(10)=1 reszta 6(16)
1+A(16)+8(16)=1+10(10)+8(10)=19(10)
19(10):16(10)=1 reszta 3(10)=1 reszta 3(16)
AF(16)+87(16)=136(16)
reprezentacja liczb całkowitych
wcześniejsze kody umożliwiały przechowywanie liczb
naturalnych, w celu zapisania liczb całkowitych należy
posłużyć się dodatkowym mechanizmem
reprezentacja znak-moduł: (ZM) najbardziej znaczący bit
informuje o znaku liczby (0 - liczba dodatnia, 1- liczba ujemna)
reprezentacja uzupełnienia do dwóch (U2): waga najbardziej
znaczącego bitu przyjmuje wartość dodatnią (0) lub ujemną (1),
pozostałe wagi zawsze są dodatnie
reprezentacja znak-moduł
przykład
znak
64
32
16
8
4
2
1
0
1
0
1
1
0
0
1
znak
64
32
16
8
4
2
1
1
0
0
0
1
1
0
1
+89(10)
-13(10)
wady
algorytmy dodawania i odejmowania liczb binarnych muszą
uwzględniać zarówno znak, jak i moduł
w reprezentacji występują dwie różne liczby 0
reprezentacja uzupełnienia do dwóch
przykład
128
64
32
16
8
4
2
1
0
1
0
1
1
0
0
1
-128
64
32
16
8
4
2
1
1
0
0
0
1
1
0
1
zakres
na n bitach można zapisać liczby <-2n-1, 2n-1-1>
dla 8 bitów: <-128,127>
dla 16 bitów: <-32768, 32767>
+89(10)
-115 (10)
konwersja między ZM i U2
kod ZM liczby całkowitej dodatniej jest także kodem U2
tej liczby
+25(ZM)=+25(U2)
0 0 0 1 1 0 0 1
0 0 0 1 1 0 0 1
kod U2 liczby całkowitej ujemnej uzyskujemy z ZM w
następujący sposób:
bit znaku zamień na 0
wykonaj negację bitową otrzymanego kodu
dodaj binarnie jedynkę
1 0 0 1 1 0 0 1
-25(ZM)
0 0 0 1 1 0 0 1
1 1 1 0 0 1 1 0
1 1 1 0 0 1 1 1
-25(U2)
negacja binarna w kodzie U2
algorytm
zaneguj wszystkie bity liczby
do otrzymanej w ten sposób liczby dodaj binarnie 1
0
1
0
1
1
0
0
1
+89(U2)
1
0
1
0
0
1
1
0
-90(U2)
1
0
1
0
0
1
1
1
-89(U2)
dodawanie binarne w kodzie U2
podczas dodawania w kodzie U2 postępuje się podobnie
jak w przypadku zwykłych liczb binarnych, ale ignoruje się
pożyczki i przeniesienia poza zakres
0
0
0
0
0
0
0
1
1(U2)
+
1
1
1
1
1
1
1
1
-1(U2)
1
0
0
0
0
0
0
0
0
0(U2)
1
0
1
1
0
1
0
1
-75(U2)
0
0
1
1
1
0
0
1
+57(U2)
1
1
1
0
1
1
1
0
-18(U2)
+
zadanie samodzielne
dodaj binarnie w kodzie U2 liczby 57 i -1
0
0
1
1
1
0
0
1
57(U2)
+
1
1
1
1
1
1
1
1
-1(U2)
1
0
0
1
1
1
0
0
0
56(U2)
odejmowanie binarne w kodzie U2
odejmowanie w kodzie U2 jest realizowane poprzez
wyznaczenie binarnej negacji odjemnika i dodaniu jej do
odjemnej
0
0
0
0
0
0
1
0
2(U2)
-
0
0
0
0
0
1
1
1
7(U2)
~
1
1
1
1
1
0
0
1
-7(U2)
0
0
0
0
0
0
1
0
2(U2)
1
1
1
1
1
0
0
1
-7(U2)
1
1
1
1
1
0
1
1
-5(U2)
+
konwersja między długościami liczb
czasem zachodzi potrzeba przechowywania liczby
n-bitowej w postaci liczby m-bitowej, gdzie m>n
reprezentacja znak-moduł
przesuń bit znaku maksymalnie w lewo, wolne pozycje wypełnij
zerami
1 0 1 1
1
0
0
0
0
0
1
1
reprezentacja uzupełnienia do dwóch
przesuń bit znaku maksymalnie w lewo, wolne pozycje wypełnij
kopią bitu znaku
1 0 1 1
1
1
1
1
1
0
1
1
kod BCD
w wielu przypadkach stosowanie "czystego" kodu
binarnego jest nieefektywne ze względu na dużą liczbę
konwersji między kodem binarnym i dziesiętnym
kasy, liczniki, kalkulatory, wagi, …
BCD (ang. binary coded decimal) to system dziesiętny
kodowany dwójkowo
1
każda cyfra dziesiętna kodowana binarnie na 4 bitach
liczba w kodzie BCD dzielona na 4-bitowe bloki dekodowane
niezależnie
0
0
9
1
0
0
1
3
1
0
1
0
4
0
0
1
1
7
1
konwersja między BCD i kodem dziesiętnym
bardzo prosta zasada konwersji
1000 0110 0101 0001(BCD) = 8651(10)
9234(10) = 1001 0010 0011 0100(BCD)
uwaga
niektóre słowa kodowe nie są dozwolone
kod BCD nie jest efektywny, ponieważ nie wykorzystuje
wszystkich kombinacji bitów
1010 0100 1101 0011(BCD) = ??? 6 ??? 3(10)
dodawanie i odejmowanie w kodzie BCD
liczby w kodzie BCD nie są naturalnymi liczbami
dwójkowymi, dodawanie i odejmowanie wymaga
stosowania korekty
korekta przy dodawaniu polega na dodaniu do grupy bitów
reprezentujących cyfrę dziesiętną liczby 0110(2)=6(10)
korekta przy odejmowaniu polega na odjęciu od grupy bitów
reprezentujących cyfrę dziesiętną liczby 0110(2)=6(10)
korekta jest konieczna, jeśli po operacji arytmetycznej
grupa bitów nie reprezentuje cyfry dziesiętnej, lub
nastąpiło przeniesienie z/do następnej grupy bitów
dodawanie i odejmowanie w kodzie BCD
14
17
0
0
0
1
0
1
0
0
+
0
0
0
1
0
1
1
1
=
0
0
1
0
1
0
1
1
0
1
1
0
+
31
=
0
0
1
1
0
0
0
1
0
0
1
1
0
0
0
1
-
0
0
0
1
0
1
1
0
=
0
0
0
1
1
0
1
1
0
1
1
0
0
1
0
1
31
16
15
=
0
0
0
1
zadanie samodzielne
Przeprowadź poniższe operacje w kodzie BCD
23+13
25-4
36+47
51+63
77+88
24-15
29+19
31-18
Download