informatyka kodowanie liczb
TRANSCRIPT
Informatykakodowanie 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 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.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. InformationTheory)
� stworzona przez Claude'a Shannona w 1948 roku
� bada inherentne ograniczenia przetwarzania sygnałów
� dziedziny: kompresja danych, przechowywanie i komunikacja
danych, wnioskowanie statystyczne, NLP, kryptografiadanych, 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 nazwanazwa 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 nazywamy podstawą systemu
� C jest zbiorem dozwolonych cyfr
Liczba jest przedstawiana jako ciąg cyfr
}1,,1,0{,2);( −=≥ qCqCq K
� 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
nmnmCcqcL i
n
mi
ii ≤≥≤∈=∑
=
,0,0,
przykłady
� system dziesiętny: 5703,32(10)
� system binarny: 110101(2)
3210123
2
10510710010310310210 ⋅+⋅+⋅+⋅+⋅+⋅= −−
−=∑i
iicL
� system binarny: 110101(2)
� system heksadecymalny: 31BD(16)
)10(543210
5
0
532121202120212 =⋅+⋅+⋅+⋅+⋅+⋅=∑=i
iicL
)10(3210
3
0
127331631611611161316)( =⋅+⋅+⋅+⋅=∑=i
iicvalL
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 01218 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 � 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.28125(10)=0.01001(2)
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
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, 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� 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
� algorytm dodawaniadwie liczby binarne a a …a a i b b …b b
+ 0 1
0 0 1
1 1 10
* 0 1
0 0 0
1 0 1
� dwie liczby binarne akak-1
…a1a0
i bkbk-1
…b1b0
� dla każdej pozycji obliczamy bit sumy sii bit przeniesienia c
i
� kolejne bity, od i-tego do k-tego obliczamy według wzoru
� bit przeniesienia ci
jest ustawiany na 1 jeśli co najmniej dwie zmienne spośród a
i, b
i, c
i-1są ustawione na 1
000000 *2mod)( bacbas =+=
2mod)( 1−++= iiii cbas
dodawanie liczb binarnych : przykład
1 0 1 0 1
+ 1 1 1
1 1 1 0 0
1 1 1 1 1
+ 1 0 0 0
21(10)
7(10)
28(10)
31(10)
8+ 1 0 0 0
1 0 0 1 1 1
1 0 1 0 1
+ 1 1 0 1
1 0 0 0 1 0
8(10)
39(10)
21(10)
13(10)
34(10)
zadanie samodzielne
1 0 0 1
+ 1 0 0 1
9(10)
9
� dodaj binarnie liczby 1001(2) i 1001(2)
+ 1 0 0 1
1 0 0 1 0
9(10)
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 0 1 0 1 21
222
1 0 1 0 1
- 1 1 1
0 1 1 1 0
1 1 1 1 1
- 1 0 0 0
1 0 1 1 1
21(10)
7(10)
14(10)
31(10)
8(10)
23(10)
zadanie samodzielne
1 0 1 0 1
- 1 1 0 1
2110)
13
� odejmij binarnie liczby 10101(2) i 1101(2)
2
- 1 1 0 1
0 1 0 0 0
13(10)
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
* 2
1 0 1 0 1 0
21(10)
42(10)
1 1 0 0 1
÷ 2
1 1 0 0
25(10)
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 � 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 +7 =15 +7 =22 22 :16 =1 reszta 6 =1 reszta 6F(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 � 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
0 1 0 1 1 0 0 1
znak 64 32 16 8 4 2 1
1 0 0 0 1 1 0 1
znak 64 32 16 8 4 2 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
0 1 0 1 1 0 0 1
128 64 32 16 8 4 2 1
1 0 0 0 1 1 0 1
-128 64 32 16 8 4 2 1
+89(10)
-115 (10)
� 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>
konwersja między ZM i U2
� kod ZM liczby całkowitej dodatniej jest także kodem U2
tej liczby
� kod U2 liczby całkowitej ujemnej uzyskujemy z ZM w
następujący sposób:
0 0 0 1 1 0 0 1 0 0 0 1 1 0 0 1
+25(ZM)=+25(U2)
� bit znaku zamień na 0
� wykonaj negację bitową otrzymanego kodu
� dodaj binarnie jedynkę
1 0 0 1 1 0 0 1
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(ZM)
-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)0 1 0 1 1 0 0 1 +89(U2)
1 0 1 0 0 1 1 0
1 0 1 0 0 1 1 1
-90(U2)
-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 1 1 1 1 1 1 1
1(U2)
-1(U2)+ 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0
-1(U2)
0(U2)
1 0 1 1 0 1 0 1
+ 0 0 1 1 1 0 0 1
1 1 1 0 1 1 1 0
-75(U2)
+57(U2)
-18(U2)
zadanie samodzielne
� dodaj binarnie w kodzie U2 liczby 57 i -1
0 0 1 1 1 0 0 1
+ 1 1 1 1 1 1 1 1
57(U2)
-1(U2)+ 1 1 1 1 1 1 1 1
1 0 0 1 1 1 0 0 0
-1(U2)
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
- 0 0 0 0 0 1 1 1
2(U2)
7(U2)- 0 0 0 0 0 1 1 1
~ 1 1 1 1 1 0 0 1
7(U2)
-7(U2)
0 0 0 0 0 0 1 0
+ 1 1 1 1 1 0 0 1
1 1 1 1 1 0 1 1
2(U2)
-7(U2)
-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
przesuń bit znaku maksymalnie w lewo, wolne pozycje wypełnij
zerami
� reprezentacja uzupełnienia do dwóch
� przesuń bit znaku maksymalnie w lewo, wolne pozycje wypełnij
kopią bitu znaku
1 0 1 1 1 0 0 0 0 0 1 1
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ójkowokodowany dwójkowo
� każda cyfra dziesiętna kodowana binarnie na 4 bitach
� liczba w kodzie BCD dzielona na 4-bitowe bloki dekodowane
niezależnie
1 0 0 1 0 0 1 1 0 1 0 0 0 1 1 1
9 3 4 7
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 � 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
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
= 0 0 1 1 0 0 0 1
14
17
31 = 0 0 1 1 0 0 0 131
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 0 0 1 0 1 0 1
31
16
15
zadanie samodzielne
� Przeprowadź poniższe operacje w kodzie BCD
� 23+13
� 25-4
� 36+47
� 51+63
77+88� 77+88
� 24-15
� 29+19
� 31-18