informatyka kodowanie liczb

39
Informatyka kodowanie liczb dr hab. inż. Mikolaj Morzy

Upload: others

Post on 21-Mar-2022

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Informatyka kodowanie liczb

Informatykakodowanie liczb

dr hab. inż. Mikołaj Morzy

Page 2: Informatyka kodowanie liczb

plan wykładu

� definicja informacji

� sposoby kodowania

� reprezentacja liczb naturalnych i całkowitych

� arytmetyka binarna

� arytmetyka oktalna� arytmetyka oktalna

� arytmetyka heksadecymalna

Page 3: Informatyka kodowanie liczb

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

Page 4: Informatyka kodowanie liczb

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

Page 5: Informatyka kodowanie liczb

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)

Page 6: Informatyka kodowanie liczb

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,

Page 7: Informatyka kodowanie liczb

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

Page 8: Informatyka kodowanie liczb

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

Page 9: Informatyka kodowanie liczb

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)

Page 10: Informatyka kodowanie liczb

ć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)

Page 11: Informatyka kodowanie liczb

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)

Page 12: Informatyka kodowanie liczb

ć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

Page 13: Informatyka kodowanie liczb

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)

Page 14: Informatyka kodowanie liczb

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

Page 15: Informatyka kodowanie liczb

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

Page 16: Informatyka kodowanie liczb

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)

Page 17: Informatyka kodowanie liczb

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)

Page 18: Informatyka kodowanie liczb

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)

Page 19: Informatyka kodowanie liczb

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)

Page 20: Informatyka kodowanie liczb

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)

Page 21: Informatyka kodowanie liczb

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

Page 22: Informatyka kodowanie liczb

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

Page 23: Informatyka kodowanie liczb

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)

Page 24: Informatyka kodowanie liczb

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)

Page 25: Informatyka kodowanie liczb

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)

Page 26: Informatyka kodowanie liczb

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

Page 27: Informatyka kodowanie liczb

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

Page 28: Informatyka kodowanie liczb

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>

Page 29: Informatyka kodowanie liczb

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)

Page 30: Informatyka kodowanie liczb

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)

Page 31: Informatyka kodowanie liczb

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)

Page 32: Informatyka kodowanie liczb

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)

Page 33: Informatyka kodowanie liczb

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)

Page 34: Informatyka kodowanie liczb

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

Page 35: Informatyka kodowanie liczb

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

Page 36: Informatyka kodowanie liczb

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)

Page 37: Informatyka kodowanie liczb

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

Page 38: Informatyka kodowanie liczb

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

Page 39: Informatyka kodowanie liczb

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