Reprezentacja informacji w komputerze

background image

1

Reprezentacja informacji w

komputerze

background image

2

Forma informacji

• Komunikat zawierający tę samą informację

może mieć różną formę, np.:

– 100 mil/h = 44.4 m/sek,

• Ten sam komunikat może być zapisany:

– alfabetem łacińskim,
– Arabskim
– albo pismem Brailla

• itd.

background image

3

Dane:

• Dane to obiekty posiadające:

– jednoznaczną nazwę
– i określoną wartość.

• Dane stanowią reprezentację informacji.
• Przykładowe typy danych:

– dane typu logicznego: „tak” lub „nie”,
– dane alfanumeryczne (alfabet + liczby),
– dane numeryczne,
– dane graficzne,
– dane alfanumeryczne o ustalonej strukturze – rekordy.
– etc.

background image

4

Format danych

• Organizacja każdego komputera zależy w dużej mierze od

sposobu, w jaki zapisywane są w nim liczby, znaki i

informacje sterujące.

– Z jednej strony, reprezentacja danych wykorzystywanych w

procesie automatycznego przetwarzania powinna być dogodna dla

wykonywania na nich operacji przez procesor.

– Z drugiej, dane muszą być czytelne i łatwe do interpretacji przez

człowieka.

• Np. jak podzielić dwie liczby zapisane rzymskimi cyframi?

• W historii rozwoju informatyki wypracowano standardy i

konwencje odnoszące się do organizacji komputerów.

background image

5

Format danych

• Większość danych przetwarzanych przez komputer ma postać tekstu

zapisanego znakami alfabetu stosowanego w życiu codziennym.

• Alfabet, w którym przedstawiane są dane wewnątrz maszyny

cyfrowej, zawiera dwa symbole: zero i jeden.

• Urządzenie elektroniczne korzystające z takiego dwuznakowego

alfabetu jest prostsze i bardziej niezawodne niż w przypadku

alfabetów o większej liczbie symboli.

• Fizyczną realizację tego dwuznakowego alfabetu stanowią:

– dziurka lub jej brak na karcie perforowanej,
– impuls i brak impulsu elektrycznego lub świetlnego,
– określony zwrot polaryzacji pozostałości magnetycznej lub jej zwrot

przeciwny,

– stan przewodzenia i nie przewodzenia tranzystora,
– 1 i 0 na papierze.

background image

6

Systemy liczbowe

• W połowie XVI wieku Europejczycy za pośrednictwem

Arabów przyjęli dziesiątkowy system liczbowy, z którego

Hindusi korzystali już od 1000. lat.

• Ogólne założenia pozycyjnych systemów liczbowych:

– wartość liczby reprezentowana jest przez kolejne potęgi

podstawy systemu,

– liczba znaków stosowanych w każdym pozycyjnym

systemie liczbowym jest taka sama, jak jego podstawa,

– największa stosowana cyfra ma wartość o 1 mniejszą

od podstawy systemu.

background image

7

Przykłady

• W systemie dziesiątkowym mamy 10 cyfr -

od 0 do 9,

• W systemie o podstawie 3 wykorzystuje się

3 cyfry: 0, 1 i 2.

• Aby zaznaczyć, w jakim systemie została

zapisana dana liczba, piszemy obok niej

podstawę np.:

– liczba 44

(10)

to dziesiętnie 44.

background image

8

Pozycyjne systemy liczbowe o

dodatniej podstawie.

W systemie pozycyjnym nieujemną (n+m) pozycyjną liczbę A:

zapisuje się w postaci :

gdzie:

p – jest podstawą systemu liczbowego; |p|>1, p

{2, 3, ...};

a

i

– cyfra na i-tej pozycji liczby A, a

i

{0, 1, ..., p – 1};

n – liczba cyfr części całkowitej liczby A;

m – liczba cyfr części ułamkowej liczby A.

Przecinek lub kropka oddziela część całkowitą C

A

liczby A od jej części

ułamkowej U

A

background image

9

Przykłady kodowania liczb

• Trzy liczby wyrażone przez wyrazy będące potęgami wybranej

podstawy:

Podstawa=10

243,56

10

=2·10

2

+4·10

1

+3·10

0

+5·10

-1

+6·10

-2

Podstawa=3

100000,12

3

1·3

5

+0·3

4

+0·3

3

+0·3

2

+0·3

1

+0·3

0

+1·3

-1

+2·3

-

2

243,555

10

...

Podstawa=2

11110011,10011

2

1·2

7

+1·2

6

+1·2

5

+1·2

4

+0·2

3

+0·2

2

+1·2

1

+1·2

0

+1·2

-1

+0·2

-

2

+ 0· 2

-3

+1· 2

-4

+1· 2

-5

+..

243,59375

10

background image

10

Cyfry znaczące

• Podstawa pozycyjnego systemu liczbowego odpowiada

liczbie cyfr wykorzystywanych  do przedstawienia danej

liczby w tym systemie:

– jeżeli m = 0, to A jest liczbą całkowitą,
– jeżeli n = 0 , to ułamkowa.
– jeśli  natomiast m i n są niezerowymi liczbami całkowitymi, to A

jest liczbą mieszaną,

a

n-1

jest cyfrą  najbardziej znaczącą (Most Significant Digit -

MSD),

a

-m

to cyfra najmniej znacząca (Least Significant Digit - LSD).

background image

11

System dwójkowy

• Dwójkowy system liczenia kojarzy się

nieodłącznie z informatyką.

– Historia binarnego systemu liczenia sięga 3000 lat

p.n.e..

– W czasach nowożytnych systemu binarnego używał już

John Napier w XVI wieku, przy czym 0 i 1 zapisywał

jako a i b.

– Gottfried Leibniz (1646 - 1716), jako pierwszy

zaproponował rozszerzenie założeń obowiązujących w

systemie dziesiętnym na systemy liczbowe o innych

podstawach.

background image

12

System dwójkowy w informatyce

• Idea zastosowania układu dwójkowego w maszynach

cyfrowych nie była wcale oczywista.

– Pierwsza elektroniczna maszyna cyfrowa ENIAC wykonywała

operacje na liczbach dziesiętnych.

– System binarny został zastosowany po raz pierwszy przez Johna

von Neumana w maszynie cyfrowej EDVAC.

• Obecnie system dwójkowy stanowi podstawę każdego

urządzenia elektronicznego sterowanego cyfrowo.

Ponieważ dzięki swej prostocie może być on z łatwością

obsługiwany przez układy elektroniczne.

background image

13

System dwójkowy

• Podstawa rozwinięcia równa się

w tym przypadku 2, a zbiór
możliwych cyfr składa się z a

i

{0, 1}.

• Kod binarny prosty – służy do

kodowania liczb dodatnich:

Potęgi 2
2

-2

=1/4= 0,25

2

-1

=1/2= 0,5

2

0

= 1

2

1

= 2

2

2

=4

2

3

=8

2

4

= 16

2

5

=32

2

6

= 64

2

7

= 128

2

8

= 256

2

9

= 512

2

10

= 1024

2

15

= 32768

==== 32 768

2

16

= 65 536

=

=

1

0

2

n

i

i

i

a

L

[

]

1

2

,

0

n

L

background image

14

System dwójkowy

• Zapis liczby

11110011,100112

(2)

odczytujemy, patrząc od lewej

strony, następująco:

 

1·2

7

+1·2

6

+1·2

5

+1·2

4

+0·2

3

+0·2

2

+1·2

1

+1·2

0

+1·2

-1

+0·2

-2

+

0· 2

-3

+1· 2

-4

+

1· 2

-5

+...

243,59375

10

MSB

- Most Significant Bit,

LSB

- Least Significant Bit.

• Liczba zapisana w systemie dwójkowym jako

11110011,100112

(2)

odpowiada liczbie 243,59375

10

w systemie dziesiętnym.

background image

15

Konwersja całkowitej liczby

dziesiętnej na liczbę dwójkową

• Konwersja liczby 147

10

na system dwójkowy:

2|147

1

2 mieści się w 147, 73 razy, reszta 1

2|73

1

2 mieści się w 73, 36 razy, reszta 1

2|36

0

2 mieści się w 36, 18 razy, reszta 0

2|18

0

2 mieści się w 18, 9 razy, reszta 0

2|9

1

2 mieści się w 9, 4 razy, reszta 1

2|4

0

2 mieści się w 4, 2 razy, reszta 0

2|2

0

2 mieści się w 2, 1 raz, reszta 0

2|1

1

2 mieści się w 1, 0 razy, reszta 1

0

Odczytując reszty od dołu do góry, otrzymujemy: 147

10

=

10010011

2

background image

16

Konwersja całkowitej liczby

dziesiętnej na liczbę dwójkową

• Konwersja liczby 147

10

na system dwójkowy:

147 = 146 +

1

73 = 72 +

1

36 = 36 +

0

18 = 18 +

0

9 = 8 +

1

4 = 4 +

0

2 = 2 +

0

1 = 0 +

1

• Odczytując reszty od dołu do góry, otrzymujemy: 147

10

=

10010011

2

background image

17

Reasumując

• W celu konwersji daną liczbę całkowitą w układzie dziesiętnym,

przedstawiamy w postaci sumy

liczby parzystej

i

jedności lub zera

:

11 =

10

+

1

5 =

4

+

1

2 =

2

+

0

1 =

0

+

1

• Po zakończeniu operacji jedynki i zera kolejnych sum stanowią

poszukiwaną liczbę w zapisie dwójkowym.

– Jedynka bądź zero wyznaczone w pierwszym kroku odpowiada najmniej

znaczącej pozycji 2

0

.

– Cyfra wyznaczona w ostatnim kroku odpowiada najbardziej znaczącej

pozycji.

• Otrzymujemy więc liczbę

1011

(2)

.

background image

18

Operacje na liczbach dwójkowych

• Stosując zapis binarny na N bitach można

zapisać liczby całkowite bez znaku z
przedziału od 0 do 2

N-1

, np. :

– na 2 bitach można zapisać wartości dziesiętne

od 0 do 3,

– na 4 bitach można zapisać wartości dziesiętne

od 0 do 15,

– na 8 - od 0 do 255.

background image

19

Zjawisko przepełnienia

• Zakres wartości, które mogą być przedstawiane za pomocą

danej liczby bitów, ma znaczenie przy wykonywaniu operacji

arytmetycznych na liczbach dwójkowych.

– Np. załóżmy, że liczby dwójkowe mogą składać się z 4 bitów.
– Dodajemy: 15

(10)

+ 15

(10)

= 30

(10)

1111

(2)

+ 1111

(2)

= ?

liczby 30 nie da się zapisać, mając do dyspozycji jedynie 4 bity.

• Sytuację taką nazywamy przepełnieniem,

– pojawia się ona przy binarnym zapisie liczby będącej wynikiem

operacji arytmetycznej, przekraczającym zakres liczb, które można

przedstawić za pomocą określonej liczby bitów.

background image

20

Przeliczanie ułamków

• Ułamki występujące we wszystkich systemach

liczbowych mogą być z pewnym przybliżeniem

przedstawiane w innym systemie jako ujemne

potęgi podstawy.

• Przecinek (kropka) bazowa oddziela całkowitą

część liczby od części ułamkowej.

– W system dziesiętnym przecinek bazowy nazywamy po

prostu przecinkiem dziesiętnym, natomiast w systemie

dwójkowym - przecinkiem dwójkowym.

background image

21

Uwaga

• Ułamki, które w jednym systemie

liczbowym są okresowe, w innym systemie
mogą być dokładnie określone.

• Na przykład:

– liczba 2/3

(10)

=0,6666… w systemie

dziesiętnym jest ułamkiem okresowym,

– a w systemie trójkowym ma skończoną postać:

0,2

(3)

=2·3

-1

=2·1/3.

background image

22

Przeliczanie ułamków

• Ułamki można przeliczać między różnymi systemami, korzystając z

metod kolejnych odejmowań i dzieleń.

• Przykładowe przeliczanie ułamka

0.4304

10

na system liczbowy o

podstawie 5:

0.4304

x 5

2.

1520 Część całkowita jest równa 2. Pomijamy ją przy kolejnym mnożeniu.

.1520

x 5 Część całkowita jest równa 0. Będzie ona potrzebna do wypełnienia

0.

7600 pustego miejsca.

.7600

x 5

3.

8000 Część całkowita jest równa 3. Pomijamy ją przy kolejnym mnożeniu.

.8000

x 5

4.

0000 Część całkowita = 4, a ułamkowa = zero.

Czytając od góry do dołu, otrzymamy: 0.4304

10

=

0.2034

5

.

background image

23

Skończona dokładność konwersji

• Często z powodu ograniczenia dostępnej

liczby bitów, zadowalająca jest część
rozwiązania, która mieści się w założonym
zakresie dokładności.

background image

24

Przykład

• Przeliczanie ułamka 0,34375

10

na system dwójkowy z precyzją do 4

bitów po przecinku.

0,34375
x 2

0

,68750

(wypełniacz)

,68750
X 2

1

,37500 ,

,37500
X 2

0

,75000

,75000
X 2

1

,50000

(przerywamy rachunki przy 4 bicie)

...........

Czytając od góry do dołu stwierdzamy, że 0,34375

10

0,0101

2

...

z

dokładnością do 4 miejsc po przecinku.

background image

25

Kod szesnastkowy

(heksadecymalny)

• Zapis binarny nie jest czytelny dla człowieka,

natomiast zapis dziesiętny wymaga każdorazowej
konwersji z zapisu binarnego.

• Dlatego do wymiany komunikatów pomiędzy

maszyną i człowiekiem stosuje się często kod
szesnastkowy (hexadecimal).

• Podstawą rozwinięcia tego systemu jest liczba

16=2

4

background image

26

Kod szesnastkowy

• Zbiór cyfr jest rozszerzony o litery alfabetu A =

10, B = 11, ... , F = 15,

a

i

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}.

• Z tabeli wynika, że konwersja liczb

szesnastkowych na binarne i na odwrót jest prosta.

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

background image

27

Przeliczanie liczb między systemami

o podstawach 2N

• Ponieważ 16 = 2

4

, grupę 4 bitów (hekstet) można

traktować jako jedną cyfrę szesnastkową.

• Podobnie, 8 = 2

3

, grupę trzech bitów (oktet)

można traktować jak jedną cyfrę w systemie
ósemkowym.

• Zależności te pozwalają w prosty przeliczać liczby

z systemu dwójkowego na ósemkowy i
szesnastkowy.

background image

28

Przeliczanie liczb między systemami

o podstawach 2

N

• Ponieważ 16 = 2

4

, grupę 4 bitów (hekstet) można traktować

jako jedną cyfrę szesnastkową.

• Podobnie, 8 = 2

3

, grupę trzech bitów (oktet) można

traktować jak jedną cyfrę w systemie ósemkowym.

• Zależności te pozwalają w prosty przeliczać liczby z

systemu dwójkowego na ósemkowy i szesnastkowy.

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

background image

29

Przykład

• Przeliczanie liczby 110010011101

2

na system ósemkowy i

szesnastkowy.

110 010 011 101

Grupując bity po 3

6 2 3 5

110010011101

2

= 6235

8

1100 1001 1101 Grupując bity po 4,
C 9 D

110010011101

2

= C9D

16

• Wynik odczytujemy jako: (C dziewięć D).
• Jeżeli liczba dwójkowa ma za mało bitów, na jej początku można

wstawić odpowiednią liczbę zer.

background image

30

Konwersja liczby szesnastkowej na

dwójkową

• Wykonuje się ją odwrotnie jak dwójkową na

szesnastkową.

– Kolejne cyfry w zapisie szesnastkowym zapisujemy

jako cztery cyfry w zapisie dwójkowym.

– Ewentualnie należy pozbyć się zer znajdujących się na

pozycji wysuniętej najbardziej w lewo, aż napotkamy

tam jedynkę, gdyż kod binarny zawsze zaczyna się od

1.

– Np. jeśli wyjdzie wynik 0001100101110 to można

go zapisać jako 1100101110 pozbywając się zer z

początku.

background image

31

Konwersja liczby szesnastkowej na

dziesiętną

• Konwersja ta odbywa się podobnie jak w przypadku liczb

binarnych, z tym, że podstawą jest nie 2, a 16.

– Weźmy dowolną liczbę w zapisie szesnastkowym, np. : AB12

(16)

– Bierzemy cyfrę wysuniętą najbardziej w prawo i postępujemy tak

samo jak w przypadku liczb dwójkowych, ale zamiast mnożnika 2
mamy 16:

2*16

0

+ 1*16

1

+ 11*16

2

+ 10*16

3

,

otrzymamy

2 + 16 + 2816 + 40960,

a więc w zapisie dziesiętnym jest to liczba:

43794

(10)

.

background image

32

Konwersja liczby dziesiętnej na

szesnastkową

• Odwróćmy teraz na powrót liczbę 43794

(10)

w zapisie dziesiętnym na

AB12

(16)

w szesnastkowym.

• Kolejne wielokrotności liczby 16 są następujące:

16

0

= 1, 16

1

= 16, 16

2

= 256, 16

3

= 4096, 16

4

= 65536 itd.

• Wybrana liczba w systemie dziesiętnym znajduje się w przedziale:

4096 < 43794 < 65536.

• Bierzemy pod uwagę liczbę mniejszą od konwertowanej, czyli 4096.

– Jest ona czwartą wielokrotnością 16, więc konwertowana liczba w

systemie szesnastkowym będzie miała 4 cyfry.

• Sprawdzamy, ile razy liczba 4096 mieści się w liczbie konwertowanej,

czyli: 43794: 4096=10.691894

– Okazuje się, że mieści się ona 10 razy.
– 10 w systemie szesnastkowym to A, zatem pierwsza cyfra to A.

background image

33

Konwersja liczby dziesiętnej na

szesnastkową c.d.

• Skoro liczba 4096 zmieściła się dziesięć razy w 43794, to jeszcze

zapewne została jakaś reszta.

• Obliczamy tę resztę.

– Mnożymy 4096*10 = 40960.
– Odejmujemy wynik od naszej liczby:

43794 - 40960 = 2834.

• Z resztą postępujemy podobnie, jak na początku konwersji.

256<2834<4096

• W następnym kroku sprawdzamy ile razy 256 mieści się w 2834.

2834:256=11.070312

– Mieści się 11 razy, zatem kolejna cyfra szukanego zapisu to B.

• Następnie znowu: obliczamy resztę, itd.
• Wynik powinien wynosić: AB12.

background image

34

Reprezentacja liczb całkowitych ze

znakiem

• Wzór pozwala przedstawiać jedynie liczby

dodatnie.

• Główny problem z zapisywaniem liczb ze znakiem w

systemie dwójkowym polega na tym, że nie bardzo
wiadomo, gdzie i w jaki sposób zapisać znak liczby.

– W wielu językach programowania automatycznie rezerwowany jest

określony obszar pamięci, którego pierwszy bit określa znak liczby.

– Przyjęło się, że jeżeli najbardziej znaczący bit ma wartość „1”, to

pozostałe bity przedstawiają liczbę ujemną.

i

n

m

i

i

p

a

A

=

=

1

background image

35

Kod prosty

• Intuicyjnym rozwiązaniem jest kod prosty,

– pierwszy bit z lewej (nazywany też najbardziej

znaczącym) służy do przechowywania
informacji o znaku,

– bity występujące po bicie znaku przechowują

wartość bezwzględną liczby.

• Na przykład:

– w 8-bitowym słowie liczba -1 byłaby zapisana

jako 10000001, natomiast +1 jako 00000001.

background image

36

Kod prosty c.d.

• W przypadku kodu prostego wartości liczb

całkowitych są zapisane jedynie na 7 bitach.

• Oznacza to, że największą liczbą całkowitą,

jaką można przechowywać w 8-bitowym

słowie, jest:

– 2

7-1

, czyli 127 = 01111111

2,

– najmniejsza liczba to -127=11111111

2

.

– Na N bitach można zapisać liczby ze znakiem

od -2

N-1

– 1 do 2

N-1

– 1.

background image

37

Arytmetyka z zastosowaniem kodu

prostego

• Arytmetyka liczb zapisanych w kodzie prostym

jest realizowana w sposób podobny, w jaki

liczymy na kartce ołówkiem.

• Reguły rządzące dodawaniem:

– Jeżeli znaki obu liczb są takie same, dodaj ich wartości

bezwzględne i pozostaw znak bez zmian.

– Jeżeli liczby mają różne znaki, musisz ustalić, która z

nich ma większą wartość bezwzględną, jej znak

powinien mieć wynik całego dodawania.

• Wyznacza się go, odejmując (nie dodając) mniejszą liczbę od

większej.

background image

38

Przykład

• Dodawanie 01001111

2

+ 00100011

2

w arytmetyce kodu prostego:

1 1 1 1

<=przeniesienia

0 1 0 0 1 1 1 1 (79)

0 + 0 1 0 0 0 1 1 +(35)

0 1 1 1 0 0 1 0 (114)

• Wszystkie „nie mieszczące się" wartości przenosimy do kolejnej

kolumny, aż do osiągnięcia siódmego bitu od prawej.

• Jeżeli i na tej pozycji trzeba wykonać przeniesienie, mówimy, że

nastąpił błąd przepełnienia i odrzucamy przeniesienie, co skutkuje

otrzymaniem nieprawidłowej sumy.

• W tym przykładzie nie nastąpiło przepełnienie i w kodzie prostym

wynik dodawania wynosi: 01001111

2

+ 00100011

2

= 01110010

2

.

background image

39

Przykład

• Dodawanie 01001111

2

+ 01100011

2

w arytmetyce

kodu prostego.

1 1 1 1 1

0 1 0 0 1 1 1 1 (79)
0 + 1 1 0 0 0 1 1 +(99)
0 0 1 1 0 0 1 0 (50)

• Trzeba wykonać przeniesienie z siódmego bitu,

oznacza to błąd przepełnienia i wynik będzie
nieprawidłowy.

background image

40

Odejmowanie w kodzie prostym

• Podobnie jak w przypadku dodawania,

odejmowanie liczb zapisanych w kodzie
prostym odbywa się podobnie do
dziesiętnego odejmowania na papierze.

• Przy tej operacji zachodzi niekiedy potrzeba

pożyczenia niektórych cyfr z odjemnej.

background image

41

Przykład

• Odejmowanie 01100011

2

- 01001111

2

w

arytmetyce kodu prostego.

0 1 1 2

pożyczenia

0 1 1 0 0 0 1 1 (99)

0 - 1 0 0 1 1 1 1 -(79)

0 0 0 1 0 1 0 0 (20)

• W wyniku otrzymujemy: 01001111

2

-01100011

2

= 00010100

2

.

background image

42

Kody uzupełnieniowe

• Z teorii liczb wynika, że można odjąć od siebie

dwie liczby dziesiętne w następujący sposób:

– odejmując odjemnik od „samych dziewiątek",
– dodając wynik do odjemnej,
– a następnie dodając z powrotem przeniesienie.

• Proces ten nosi nazwę poszukiwania uzupełnienia

zmniejszonej podstawy odjemnika.

background image

43

Kod odwrotny

(notacja uzupełnieniowa)

• Dla d-cyfrowej liczby N w systemie liczbowym o

podstawie p, uzupełnienie zmniejszonej
podstawy
liczby N definiujemy jako:

(p

d

- 1) - N.

– W przypadku liczb dziesiętnych p = 10, więc

zmniejszona podstawa wynosi:10 - 1 = 9.

– W przypadku liczb dwójkowych zmniejszona podstawa

jest o jeden mniejsza od podstawy systemu p = 2, czyli
jest równa 1.

background image

44

Przykład

• Obliczmy różnicę: 167 – 52.
• W układzie dziesiętnym zmniejszona podstawa

odjemnika = 9, czyli (p

d

- 1) = (10

3

-1) = 999.

• Liczymy w arytmetyce dopełnieniowej dziewiątek :

– odejmujemy odjemnik: 999 – 52= 947.
– Otrzymany wynik dodajemy do odjemnej:

167 - 52 = 167 + 947 =

1

114.

– 1

przeniesienie z kolumny setek trafia z powrotem do

kolumny jedności,

– co daje prawidłowy wynik: 167 - 52 = =114+

1

=115.

background image

45

Kody uzupełnieniowe

• Metodę tę zastosowano w odniesieniu do liczb

dwójkowych, co pozwoliło uprościć (?!) operacje
arytmetyczne dokonywane przez ... komputery.

• Zaletą kodów dopełnieniowych w porównaniu z

kodem prostym jest to, że nie wymagają one
osobnego przetwarzania bitów znaków, a mimo to
z wartość najbardziej znaczącego bitu, nadal
wskazuje, czy liczba jest dodatnia czy ujemna!

background image

46

Notacja uzupełnieniowa do 1

• W przypadku notacji uzupełnieniowej do 1

liczba 0101

2

to:

1111

2

-0101

2

=1010

2

.

– Przedstawienie liczby dwójkowej w kodzie

odwrotnym sprowadza się do zamiany
wszystkich zer na jedynki i vice versa.

– Proste odwrócenie bitów ułatwia sprzętowe

implementowanie kodu odwrotnego.

background image

47

Liczby ujemne w notacji

uzupełnieniowej. Podsumowanie

• Notacja uzupełnieniowa pozwala zapisywać liczby ujemne bez

konieczności przeznaczenia osobnego bitu na reprezentację znaku

liczby

– Co było konieczne w kodzie prostym.

• Liczbę ujemną, należy przekształcić na jej dopełnienie do

zmniejszonej podstawy.

– Najstarszy bit liczb ujemnych powinien mieć wartość 1.

• Nie jest konieczne zastępowanie liczby dodatniej jej uzupełnieniem.

– Najstarszy bit liczb dodatnich powinien mieć wartość 0.

• Notacja uzupełnieniowa pozwala uprościć odejmowanie poprzez

przekształcenie go w dodawanie.

– Np. odejmowanie: 10 – 7 możemy zastąpić dodawaniem liczby o

przeciwnym znaku, w tym przypadku 10 + (–7).

background image

48

Przykład

• Odejmowanie liczb 23

10

i -9

10

w kodzie odwrotnym.

• Liczby 23

10

i -9

10

zapisujemy w kodzie odwrotnym, na 8

bitach,

23

10

= +(00010111

2

) = 00010111

2

-9

10

= -(00001001

2

) = 11110110

2

Obliczamy różnicę 23

10

+(-9

10

) w arytmetyce kodu odwrotnego.

• 1 1 1 1 1

<-przeniesienia

0 0 0 1 0 1 1 1 (23)
+1 1 1 1 0 1 1 0 +(-9)
0 0 0 0 1 1 0 1 (14)
+1
0 0 0 0 1 1 1 0 14

10

Przeniesienie najbardziej znaczącego bitu dodamy do najmniej

znaczącego bitu sumy.

background image

49

Przykład

• Dodawanie 9

10

do -23

10

w arytmetyce kodu

odwrotnego.

1

Ostatnie 0 0 0 0 1 0 0 1 (9)
przeniesienie ma +1 1 1 0 1 0 0 0 +(-23)
wartość 0, a więc 1 1 1 1 0 0 0 1 -14

10

skończyliśmy działania.

• Skąd wiadomo, że liczba 11110001

2

to -14

10

?

– Jest to liczba ujemna ponieważ jej MSB=1,
– Obliczamy dopełnienie 11110001

2

do 11111111

2

,

które wynosi 00001110

2

, czyli 14

10

.

background image

50

Wada kodu odwrotnego

• Zasadniczą wadą kodu odwrotnego jest

niejednoznaczność przedstawienia zera
jako: 0000...0000 lub 1111...1111.

• Dlatego zarzucono notację uzupełnieniową

do 1 na rzecz bardziej efektywnej notacji
uzupełnieniowej do 2.

background image

51

Kod dopełnieniowy

notacja uzupełnieniowa do 2

• Uzupełnieniem do podstawy d-cyfrowej liczby N

zapisanej w systemie liczbowym o podstawie p
nazywamy liczbę w postaci p

d

- N dla N różnych

od zera i zero dla N = 0.

– Uzupełnianie do podstawy jest może bardziej intuicyjne

od uzupełniania do zmniejszonej podstawy.

– Np. uzupełnieniem do podstawy 4-bitowej liczby

0011

2

, jest 2

4

- 0011

2

=10000

2

-0011

2

=1101

2

.

background image

52

Notacja uzupełnieniowa do 2

• Notacja uzupełnieniowa do 2 jest notacją

uzupełnieniową do 1 powiększoną o 1.

• W celu przedstawienia liczby w kodzie

dopełnieniowym do 2, należy:

– zanegować wszystkie jej bity,
– do uzyskanego wyniku dodać l.

background image

53

Notacja uzupełnieniowa do 2

upraszcza dodawanie i odejmowanie

• Ponieważ odjemnik (czyli liczba, którą dopełniamy i dodajemy) jest

na końcu powiększana, nie musimy przejmować się bitem

przeniesienia, który trzeba by dodać do uzyskanego wyniku.

• Pomijamy wszelkie przeniesienia wychodzące z najbardziej

znaczących bitów.

• Na kod dopełnieniowy muszą być przekształcane jedynie liczby

ujemne.

• Np. liczby 23

10

, -23

10

i -9

10

w 8 bitowym kodzie dopełnieniowym

przedstawiają się następująco:

23

10

= +(00010111

2

) = 00010111

2

-23

10

= -(00010111

2

) = 11101000

2

+1= 11101001

2

-9

10

= -(00001001

2

) = 11110110

2

+1= 11110111

2

background image

54

Konwersja kodu dopełnieniowego na

system dziesiętny

Z liczbami dodatnimi nie ma żadnego problemu.

– Np. chcąc poznać wartość liczby 00010111

2

zapisanej w kodzie dopełnieniowym,

przeliczamy ją z systemu dwójkowego na dziesiętny, otrzymując 23.

Przeliczanie liczb ujemnych wymaga wykonania w odwrotnej kolejności

kroków procedury, która przypomina konwersję z systemu dziesiętnego na

dwójkowy.

– Np. liczba 11110111

2

jest zapisana w kodzie dopełnieniowym i chcemy poznać

jej dziesiętną wartość.

– Jest to liczba ujemna, przedstawiona w notacji uzupełnieniowej do 2.
– Znajdujemy jej postać w kodzie odwrotnym, negując wszystkie bity, a następnie

dodajemy 1:
00001000

2

+ 1 = 00001001

2

= 9

10

.

– Ponieważ liczba, wyjściowa była ujemna, należy pamiętać o zmianie znaku, czyli

11110111

2

= -9

10

.

background image

55

Przykład operacji w kodzie

dopełnieniowym

Liczby ujemne są przedstawiane w postaci uzupełnień do 2 ich wartości bezwzględnych,
np.:

125

(10)

= 1111101

(2)

Najstarszy bit uzupełniamy 0

01111101

(2)

uzupełnienie do 1 ma postać

10000010

(2)

uzupełnienie do 2 tworzy się przez dodanie liczby 1 do jej uzupełnienia do 1.

10000010

(2)

00000001

(2)

-125

(10)

= 10000011

(2)

Liczby 8-bitowe mieszczą się z zakresie od –128 do 127.

Liczby dodatnie mają MSB=0, a liczby ujemne MSB=1.

background image

56

Zastosowania

• Kod dopełnieniowy jest najpopularniejszym

sposobem zapisu liczb ze znakiem:

– Operacja uzupełnienia do 1 może być dokonana przez

prosty obwód logiczny TTL – bramkę NOT.

– Koncepcja ta pozwala na uniwersalność konstrukcji

komputera.

• Operacja odejmowania danej liczby jest zastąpiona

dodawaniem liczby komplementarnej.

• Większość komputerów używa komplementarnej

(uzupełnieniowej) arytmetyki dla reprezentacji

liczb całkowitych.

background image

57

Własności kodu dopełnieniowego

• Zalety

– Liczby w postaci dopełnieniowe łatwo się dodaje i odejmuje,
– Zero ma jednoznaczną reprezentację

• same zera,

– System kodowania można dopasować do potrzeb liczb

zapisywanych na większej liczbie bitów.

• Wady

– Asymetria zakresów liczb, które można zapisać na N bitach:

• w kodzie prostym 4 bity pozwalają zapisać wartości od -7 do +7,
• w kodzie dopełnieniowym wartości od -8 do +7.

– Pierwszy bit liczby dodatniej musi mieć wartość 0, więc gdy wszystkie

pozostałe bity będą miały wartość 1, otrzymamy 0111

2

, czyli +7.

background image

58

Reprezentacja stałoprzecinkowa

• W większości komputerów zakres liczb na których

wykonywane są operacje ogranicza się do ułamków

właściwych,

– tzn. ustala się przecinek bezpośrednio po pozycji znaku.

• Liczby przetwarzane przez maszynę są sprowadzane do

zakresu [–1, 1] poprzez skalowanie.

• Znając zakres danych i wyników ustalić można wartość

skalującą 2

S

stosowaną podczas wprowadzania i

wyprowadzanie liczb do i z komputera.

– Na przykład, gdy S=16, dopuszczalne liczby zawierają się w

zakresie: –65536 < x < 65536

background image

59

Wada reprezentacji

stałoprzecinkowej

• W obliczeniach naukowo-technicznych często mamy do czynienia z

bardzo dużymi lub bardzo małymi liczbami.

– Np.: stała grawitacji G = 6.67 ·10

-11

N m

2

kg

-2

lub stała występująca w

prawie Coulomba k = 9 ·10

9

N m

2

C

-2

.

• W przypadku reprezentacji stało przecinkowej działania na takich

liczbach mogą prowadzić do wytworzenia liczby nadmiarowej, nie

mieszczącej się w przyjętym zakresie (overflow).

– Np. przyjmując zakres zmienności liczb równy 10

20

,

• przy około 3.17 b/10 (bitu na rząd),
• daje to około 2

63

.

• Reprezentacja oparta na liczbach całkowitych wymaga ponad 60

bitów, aby przedstawić te liczby, ale nawet wówczas dokładność

obliczeń będzie niewielka.

background image

60

Mnożenie i dzielenie liczb

całkowitych

• Tabliczka mnożenia liczb binarnych jest prosta:

– zero razy zero to zero,
– a jeden pomnożone przez dowolną liczbę równa się tej liczbie.

• Metoda mnożenia bezpośredniego podobnie jak w mnożeniu

pisemnym liczb dziesiętnych, jest ono zastąpione wielokrotnym

dodawaniem odpowiednio przesuniętej mnożnej.

• Mechanizm mnożenia:

– każdy składnik iloczynu zapisujemy w osobnej komórce pamięci,
– wynik umieścimy w trzeciej komórce,
– począwszy od najmniej znaczącego bitu, ustawiamy specjalny wskaźnik

na każdy bit mnożnika po kolei,

– dla każdego bitu mnożnika „przesuwamy" mnożną o jeden bit w lewo.
– gdy wskazywany bit mnożnika ma wartość l, „przesunięta" mnożna jest

dodawana do bieżącej sumy iloczynów cząstkowych.

background image

61

Przykład

Pomnożyć binarnie liczbę 1101

2

przez 1011

2

.

Obie liczby umieszczamy jedna pod drugą tak, aby ich cyfry znalazły się w kolumnach o

tych samych wagach:

1101
×1011

Każdą cyfrę mnożnej mnożymy przez poszczególne cyfry mnożnika zapisując wyniki

mnożeń w odpowiednich kolumnach:

1101
×1011

0001101
0011010
0000000
1101000

10001111

Ponieważ przesuwamy mnożną o jeden bit na każdy bit mnożnika, wyznaczenie iloczynu

wymaga dwa razy szerszej przestrzeni adresowej niż przestrzeń zajmowana przez

mnożną (mnożnik).

background image

62

Dzielenie binarne

• Dzielenie może być realizowane na dwa sposoby:

– iteracyjnie odejmować dzielnik od dzielnej,
– stosować metodę „prób i błędów".

• Jak w przypadku mnożenia, nie przedstawiamy bardziej

zaawansowanych algorytmów dzielenia binarnego (są one trudne).

• Dzielenie może doprowadzić do „zawieszenia" komputera

przy próbie dzielenia przez zero, a także w sytuacji, gdy

operandami są dwie liczby o diametralnie różnej

wielkości.

– Gdy dzielnik jest znacznie mniejszy od dzielnej, mamy do

czynienia z sytuacją nazywaną błędem niedomiaru przy dzieleniu,

która jest postrzegana przez komputera jako próba dzielenia przez

zero.

background image

63

Reprezentacja zmiennoprzecinkowa

(Floating-Point Representation)

Często w obliczeniach stosuje się notację normalną (naukową) mająca

postać kilku cyfr po przecinku razy 10 podniesione do odpowiedniej potęgi

X = ± liczba

10

wykładnik

.

– W notacji naukowej liczba

{1.0, 9.9999999…}.

Reprezentacja zmiennoprzecinkowa wykorzystuje podobną koncepcję.

Standardowo liczbę zmiennoprzecinkową stanowi para liczb całkowitych i bit

znaku:

x = znak * ułamek * 2

wykładnik

– w notacji zmiennoprzecinkowej 0.1 ≤ |ułamek| ≤1.0,
– każda liczba ma swoją "własną skalę" w postaci wykładnika.

Ułamek zapisany jest w kodzie dwójkowym o określonej długości, a

wykładnik jest liczba całkowitą, dodatnią lub ujemną.

background image

64

Implementacja arytmetyki

zmiennoprzecinkowej

W komputerach liczby zmiennoprzecinkowe składają się z trzech części:

– bitu znaku,
– części wykładniczej

• reprezentującej wykładnik potęgi dwójki,

– części ułamkowej

• mantysy.

Liczba bitów przechowujących część wykładniczą i mantysę zależy od tego,

czy bardziej zależy nam szerokości dostępnego przedziału liczb

– więcej bitów na wykładnik,

czy na precyzji

– więcej bitów na mantysę.
– Np.

– Binarna reprezentacja części ułamkowej i wykładnika jest przechowywana w

jednym słowie.

background image

65

Ograniczenia reprezentacji

zmiennoprzecinkowej

• Za pomocą reprezentacji zmiennoprzecinkowej wyrazić można

jedynie ograniczony zbiór liczb.

• Na przykład ustalamy:

– rozmiar części ułamkowej na 4 bity,
– Rozmiar wykładnika na 3 bity włączając w to znak wykładnika.
– jeden bit reprezentuje znak ułamka

w sumie 8 bitów.

• Największa liczba zapisana w ten sposób to 0.9375*2

3

, a kolejna po

niej to tylko 0.875*2

3

, różnica tych liczb wynosi Δ= 0.9375*2

3

-

0.875*2

3

=0.0625*2

3

.

• Widać dlaczego liczba bitów użytych w obliczeniach jest istotna!

background image

66

Przykład

• Liczba 17 w postaci dziesiętnej:
17 = 17,0 * 10

0

= 1,7 * 10

1

= 0,17 * 10

2

.

• Analogicznie, w systemie dwójkowym:
17

10

= 10001

2

* 2

0

= 1000,1

2

* 2

1

= 100,01

2

* 2

2

= 10,001

2

* 2

3

= 1,0001

2

* 2

4

=

0,10001

2

* 2

5

.

• Jeżeli zdecydujemy się wykorzystać tę ostatnią postać,

część ułamkowa: 10001000, a część wykładnicza:
00101.

• Mając do dyspozycji 14 bitów, liczba 17 przyjmie więc

postać:

background image

67

Przykład

• W przyjetej postaci zmiennoprzecinkowej można zapisać

znacznie większe liczby niż w zapisie stałoprzecinkowym
na 14 bitach,

– w którym wykorzystuje się 14 bitów plus kropkę pozycyjną.

• Np. zapisana w tej postaci liczba 65 536

10

= 0.1

2

·2

17

,

wyglądałaby następująco:

background image

68

Problem ujemnych wykładników

• Nie przewidzieliśmy miejsca na ujemne wykładniki.
• Nie możemy zapisać w żaden sposób liczby np. 0,25,

ponieważ 0,25 to 2

-2

, a nie mamy jak zapisać wykładnika

-2.

• Możliwe rozwiązania problemu:

– dodając do wykładnika bit znaku,
– stosować tak zwane przesunięte wykładniki,

• W drugim przypadku do porównywania wartości dwóch

liczb zmiennoprzecinkowych można zastosować proste
układy elektroniczne.

background image

69

Przesuwane wykładniki

• Liczby całkowite w pożądanym zakresie

wykładników są najpierw dostosowywane
w ten sposób, że do każdego wykładnika
dodaje się pewną stałą wartość
przesunięcia.

• Jest to liczba leżąca mniej więcej na środku

dozwolonego zakresu wartości, co do której
umawiamy się, że będzie oznaczała zero.

background image

70

Przesuwane wykładniki

• Przykładowo:

– wykładnik ma 5 bitów, co pozwala na przypisanie mu 2

5

=32

wartości.

– jako przesunięcie wybieramy wartość 16, leży ona na osi

liczbowej w połowie odległości między 0 a 31.

– Każda liczba mająca wykładnik większy od 16 będzie traktowana

przez nas jako dodatnia, zaś pozostałe będziemy uznawali za

liczby ujemne.

• Nazywa się to „notacją z nadmiarową szesnastką”,

ponieważ chcąc poznać rzeczywistą wartość wykładnika,

musimy odjąć od niego 16.

• Uwaga:

– wykładniki złożone z samych zer lub z samych jedynek są

zazwyczaj zarezerwowane dla reprezentacji symboli specjalnych,

takich jak zero lub nieskończoność.

background image

71

Przykład

• Wróćmy do naszego przykładu z zapisem liczby 17:

obliczyliśmy, że 17

10

= 0,10001

2

* 2

5

.

• Przesunięty wykładnik będzie teraz wynosił: 16 + 5 = 21:

0 10101

10001000





0 00101

10001000

background image

72

Niejednoznaczność reprezentacji

• Wciąż mamy poważny problem - nie

wszystkie liczby mają jednoznaczną

reprezentację.

– Np. przedstawione niżej liczby mają tę samą

wartość: 17

10

= 0,10001

2

* 2

5

=

0,010001

2

* 2

6

= 0,0010001

2

* 2

7

=

0,00010001

2

* 2

8

.

background image

73

Rozwiązanie problemu

niejednoznaczności

• W celu usunięcia niejednoznaczności

reprezentacji liczb przyjęto, normalizację:

– najbardziej znaczący bit mantysy będzie miał

zawsze wartość 1.

• Rozwiązanie to ma tę dodatkową zaletę, że

występowanie jedynki na pierwszej pozycji

jest pewne, dzięki czemu zyskuje się jeden

dodatkowy bit mantysy, co zwiększa

precyzję.

background image

74

Przykład

• Zapiszemy liczbę 0,03125

10

w postaci

zmiennoprzecinkowej, w notacji „z nadmiarową
szesnastką”:

0,03125

10

= 0,00001

2

* 2

0

= 0,0001

2

* 2

-1

= 0,001

2

* 2

-2

= 0,01

2

* 2

-3

= 0,1

2

* 2

-4

• Po dodaniu „przesunięcia" pole wykładnika będzie

przechowywało wartość 16 - 4 = 12.

background image

75

Arytmetyka

zmiennoprzecinkowa

• Aby dodać do siebie dwie liczby zapisane w notacji

wykładniczej, np. 1,5 * 10

2

+ 3,5 10

3

, należy

przekształcić je w taki sposób, aby obie miały taki sam
wykładnik.

1,5*10

2

+3,5*10

3

=0,15*10

3

+3,5*10

3

=3,65*10

3

• Dodawanie i odejmowanie liczb zmiennoprzecinkowych

przebiega w podobny sposób

background image

76

Przykład

• Dodajemy liczby dwójkowe, zapisane w znormalizowanej notacji 14-

bitowej z przesunięciem równym 16.

– Jeden ze składników dodawania jest podniesiony do potęgi pierwszej, a

drugi do zerowej.

– Wyrównanie obu tych wartości względem kropki ułamkowej daje

:

1,1001000
+0,10011010
10,00101010

– Dokonując ponownie normalizacji, zachowujemy większy wykładnik i odrzucamy

najmniej znaczący bit:

background image

77

Mnożenie i dzielenie

• Mnożenie i dzielenie przeprowadzane jest zgodnie z tymi

samymi regułami dotyczącymi wykładników stosowanymi

dla liczb dziesiętnych

– np. 2

-3

* 2

4

= 2

1

.

• Przykład mnożenia:

• Iloczyn:

0,11001000*0,10011010 = 1,11011011,
po ponownej normalizacji i odpowiednim przesunięciu

wykładnika wynik ma postać:

background image

78

Precyzja obliczeń

zmiennoprzecinkowych

• Wykonując obliczenia intuicyjnie rozumiemy, że

operujemy na nieskończonym zbiorze liczb rzeczywistych.

– Dla każdej pary liczb rzeczywistych potrafimy zawsze znaleźć

liczbę większą od największej i mniejszą od najmniejszej z nich.

• Komputery są w tym zakresie ograniczone.

– Odwzorowuje nieskończony zbiór liczb rzeczywistych na

skończony zbiór liczb całkowitych.

• Komputer dysponuje jedynie pewnym przybliżeniem

zbioru liczb rzeczywistych.

– Im więcej bitów mamy do dyspozycji, tym jest ono dokładniejsze.
– Jednak niezależnie od liczby użytych bitów zawsze jest ono

obarczone błędem.

background image

79

Przykład

• W przedstawionym modelu możemy zapisywać znormalizowane

liczby z zakresu od -0,11111111

2

* 2

15

do +0,11111111

2

* 2

15

.

– Oczywistym jest, że duże liczby, jak 2

-1

, nie zmieszczą się w tym

zakresie.

– Nie możemy także zapewnić precyzyjnej reprezentacji liczby 128.5

10

,

która jak najbardziej mieści się w dozwolonym zakresie.

• 128,5

10

= 10000000,1

2

, liczba ta ma 9 bitów długości, a mantysa może

przechowywać tylko 8.

• Zazwyczaj najmniej znaczący bit jest odrzucany lub zaokrąglany do

sąsiedniego bitu.

• Błąd zaokrąglenia można oszacować wyznaczając stosunek

bezwzględnej wartości błędu do prawdziwej wartości liczby.

– Dla liczby 128,5 błąd procentowy wynosi: 128,5-128|/128,5 = 0,003906

0,39%

background image

80

Kumulacja błędów

• Z każdym kolejnym działaniem tego rodzaju błędy będą się

potęgować, co doprowadzi do wyraźnego spadku precyzji
obliczeń.

– Np. kumulacja błędu obliczeniowego dla 14-bitowej liczby zmienno

przecinkowej.

Mnożna

Mnożnik

14-bitowy
wynik

Prawidłowy
wynik

Błąd

1000,001

* 0,11101000= 1110,1001 14,7784

1,46%

(16,125)

(0,90625)

(14,5625)

1110,1001 * 0,11101000= 1101,0011 13,4483

1,94%

(14,5625)

(13,1885)

1101,0011 * 0,11101000= 1011,1111 12,2380

2,46%

(13,1885)

(11,9375)

1011,1111 * O,l1101000= 1010,1101 11,1366

2,91%

(11,9375)

(10,8125)

1010,1101 * 0,11101000= 1001,1100 10,1343

3,79%

(10,8125)

(9,75)

1001,1100 * 0,11101000= 1000.1101 8,3922

4,44%

(9,75)

(8,8125)

background image

81

Standard zmiennoprzecinkowy

IEEE-754

• Do lat osiemdziesiątych XX w. firmy komputerowe

samodzielnie decydowały o formacie przechowywania

liczb zmiennoprzecinkowych, na rynku istniało równolegle

wiele niezgodnych ze sobą systemów.

• W roku 1985 Instytut Inżynierów Elektryków i

Elektroników (IEEE) opublikował standard regulujący

zagadnienia związane z reprezentacją liczb

zmiennoprzecinkowych o pojedynczej i podwójnej

precyzji.

– Jest on znany jako IEEE-754 (1985).

• Obecnie wszystkie komputery są zgodne z modelem IEEE-

754.

– Do roku 1998 komputery IBM zbudowane były w oparciu o

architekturę zmiennoprzecinkową, Systemu/360 z 1964 roku.

background image

82

Standard IEEE-754 (1985)

• Dla liczb o pojedynczej precyzji standard zaleca:

– 8-bitowy wykładnik,
– przesunięcie o 127,
– mantysa liczy 23 bity,
– po uwzględnieniu bitu znaku całkowita długość słowa

wynosi 32 bity.

• Dla liczb o podwójnej precyzji:

– zapisywane są na 64-bitowych słowach,
– wykładnik liczy 11 bitów,
– mantysa 52 bity.
– przesunięcie wynosi 1023.

background image

83

Standard zmiennoprzecinkowy

IEEE-754

• Zakres wartości, jakie mogą przyjmować liczby o podwójnej precyzji

w rozumieniu standardu IEEE.

• Jeżeli wykładnik ma wartość 255 oznacza to:

– plus bądź minus nieskończoność, mantysa = zero,
– wartość nieliczbowa NaN (not a number), mantysa

zera.

• Wartość NaN służy do oznaczania wartości, które nie są liczbami

rzeczywistymi. Najczęściej oznacza to wystąpienie błędu.

background image

84

Dane alfanumeryczne

• Dane alfanumeryczne – tekstowe mają postać znaków

pisarskich – liter, cyfr, znaków przestankowych i innych

symboli .

• W komputerze są one reprezentowane przez liczby,

określające pozycję danego symbolu w tablicy kodowej.

• Standardy kodowania znaków pisarskich:

– EBCDIC (Extended Binary-Coded-Decimal Interchange Code) -

7 bitów.

– ASCII (American Standard Code for Information Exchange) -

7 bitów lub 8 bitów.

– ISO – (International Organization for Standarisation) – pełne 8

bitów

– UNICODE – 16 bitów

background image

85

Kod ASCII

• Kod ASCII (American Standard Code for Information

Interchange) został opracowany w 1963.

• Na 128 pozycjach kodowych zawiera on:
• na pozycjach (32 – 127). znaki widoczne,

– cyfry, znaki interpunkcyjne, podstawowe symbole matematyczne

oraz małe i wielkie litery alfabetu łacińskiego,

• na pozycjach (0 – 31) znaki niewidoczne,

– kody formatujące, kody sterujące wymianą informacji i

urządzeniami.

• W oryginalnej wersji ASCII do reprezentacji tej liczby

kodów koniecznych jest 7 bitów, 8 bit służył kontroli

poprawności zapisu

– bit parzystości.

background image

86

EBCDIC

• Kody rodziny EBCDIC są używane w

systemach firmy IBM.

• Bazują one na binarnym kodowaniu liczb

dziesiętnych reprezentujących pozycje
kodowe znaków.

background image

87

Znaki ASCII

0 – 31 – kody sterujące

32 – 47 – znaki pomocnicze ( ,!,+,-, ...)

48 – 57 – cyfry 0 – 9

58 – 64 – znaki pomocnicze (:,;,>,=,<,?,@)

65 – 90 – A, B, ... , Z

91 – 96 – znaki specjalne

97 – 122 – a, b, ... , z

123 – 126 – znaki specjalne

127 – DEL

background image

88

Znak można zapisać w postaci dwójkowej, np.:

J

a

c

e

k

11010001

10000001

10000011

10000101

10000010

10101010

11100001

11100011

11100101

11101011

W sumie możliwych jest 128 symboli jest to wystarczająca liczba
symboli dla US/UK English, nie wystarczyło to jednak aby ASCII stał
się kodem uniwersalnym ze względu na:

– francuskie (è, é, etc.), niemieckie (ä, ß, etc.),

– polskie (ą, ę,etc), czeskie (ĉ, ŝ etc),

_ japońskie i chińskie (Kanji).

background image

89

Kod ASCII c.d.

• Gdy kontrolę poprawności zapisu zaczęto

realizować innymi metodami

– kody z korekcją błędów

powstał rozszerzony kod ASCII liczący 256

znaków.

– pierwsze 128 pozycji jest identyczne, jak w kodzie

ASCII,

– kolejne 128 pozycji zawiera znaki dodatkowe,

• np. litery akcentowane, rozszerzony zestaw symboli

matematycznych, litery alfabetów narodowych.

background image

90

Inne systemy kodowania

• Istnieje wiele kodów tej rodziny, używanych w różnych

częściach świata.

– DOS: Code Page, czyli strona kodowa 852, zwana Latin 2
– Windows 3/95: CP-1250, Central-European encoding
– ISO-8859-2.
– Unicode, 2 bajty/znak czyli 65536 znaków.

• Alfabet polski ma 35 liter, uwzględniając małe i duże

litery oraz znaki specjalne jest to w sumie około 100

znaków.

• W Polsce najpowszechniej używa się kodów ISO8859-2

oraz Microsoft CP1250.

background image

91

UNICODE

• UNICODE jest uniwersalnym kodem znakowym,

umożliwiającym reprezentację wszystkich znaków

pisarskich zapisu fonetycznego używanych na całym

świecie

• UNICODE wykorzystuje do reprezentacji znaku 16 bitów

(2 B/znak)

– w sumie można zakodować 65536 znaków.
– to wystarcza dla zakodowania dużych, małych oraz specjalnych

form liter każdego ze znaczących alfabetów: łacińskiego,

greckiego, cyrylicy, hebrajskiego, etc.

– w zakresie języka angielskiego UNICODE jest zgodny z kodem

ASCII.

• Pozostał jednak problem. Dostępnych jest tylko 20992

kodów dla ideogramów Han, których jest ponad 50000.

background image

92

UNICODE

• Każdy znak diakrytyczny

– np. ogonki, akcenty, umlaut

ma swój własny kod, więc dla liter z którymi

znaki te występują używane są kombinacje

kodów.

• W odróżnieniu od kodu ASCII kody te

jednoznacznie identyfikują symbol.

• Daje to możliwość swobodnego mieszania znaków

różnych krajów bez obawy o niejednoznaczność.

background image

93

Bity i bajty

przypomnienie

• „Bit” = binary unit, czyli jednostka informacji.
• w układzie dwójkowym.

– Używając 1 bit można skonstruować 2 znaki: 0, 1.
– Z 2 bitów da się złożyć 4 znaki: 00, 01, 10, 11.
– Z 3 bitów 8 znaków: 000, 001, 010, 011, 100, 101, 110,

111.

– Z 4 bitów 16 znaków: 0000, 0001, 0010, 00011, ...,

1111.

– 8 bitów pozwala odróżnić 28 = 16 x 16 = 256 znaków.

• Ciąg 8 bitów = 1 bajt, [8b]=[1B] podstawowa

jednostka struktury pamięci.

background image

94

Wielkość danych

• Przedrostek kilo oznacza w informatyce nie 1000, a potęgę

liczmy 2 najbliższą liczbie 1000, czyli 1024 = 2

10

.

 
• 2

10

=1024=1K, kilobajt, typowa strona tekstu to kilka KB;

• 2

20

=1024K=1M, megabajt, książka bez grafiki lub minuta

muzyki;

• 2

30

=1024M=1G, gigabajt, film cyfrowy, sporo grafiki,

ludzki genom;

• 2

40

=1024G=1T, terabajt,

– Biblioteka Kongresu USA zawiera około 20 TB informacji

tekstowej, tyle co kilka dużych dysków magnetycznych.

• 2

50

=1024T=1P, petabajt, ludzka pamięć?

background image

95

Rozróżnienie B i b:

• B=bajty, KB=kilobajty, MB=megabajty, GB=gigabajty, ...
• b=bity, Kb=kilobity, Mb-megabity, ....
• Słowo (word) jest podstawową jednostka danych przetwarzanych

przez CPU.

– Składa się ono z 8, 16, 32, 48, 64, 128 lub 256 bitów, na których

wykonywana jest jednocześnie operacja logiczna lub arytmetyczna.

• Jest ono zwykle określone rozmiarem rejestru pamięci danych MDR.

– The Memory Data Register (MDR) is the register of a computer's control

unit that contains the data to be stored in the computer storage (e.g.

RAM), or the data after a fetch from the computer storage.

– It acts like a buffer and holds anything that is copied from the memory

ready for the processor to use it.

background image

96

1

background image

97

Istnieje różnica między dzieleniem liczb całkowitych, a dzieleniem
zmiennoprzecinkowym:
•przy dzieleniu liczb całkowitych wynik podawany jest w dwóch
częściach, to znaczy w postaci ilorazu i reszty,
•Z kolei przy dzieleniu zmiennoprzecinkowym wynik jest ułamkiem
zapisanym w systemie dwójkowym.

Obliczenia zmiennoprzecinkowe wykonywane są przez wydzielone
obwody, nazywane wspólnie jednostką zmiennoprzecinkową (FPU).


Wyszukiwarka

Podobne podstrony:
Algorytmy i struktury danych Wykład 1 Reprezentacja informacji w komputerze
Podstawy Informatyki Wykład VI Reprezentacja informacji w komputerze
Reprezentacja informacji w komputerze
Algorytmy i struktury danych Wykład 1 Reprezentacja informacji w komputerze
Informacja z komputera
Przedstawianie Informacji w komputerze wprowadzenie2010
UP Wrocław lista zadan, Technologia Informacyjna semestr 1 oraz Informatyka i komputerowe wspomagan
Informacja z komputera (2)
informa4ss, KOMPUTERY
Informatyka, Komputery, Komputery
Funkcje Informacyjne Komputera Pokładowego Vectra B [D], Motoryzacja
Przywracanie zawartości rejestru w Windows XP, 7. Szkoła, Technik Informatyk, Komputer Naprawa itp
PLAN INFORMATYZACJI, KOMPUTERY
Informatyka, Komputerowe programy wspomagania operacyjnego generał, Komputerowe programy wspomagania
Informatyka, Komputerowe programy wspomagania operacyjnego generał, Komputerowe programy wspomagania
Potega jednego e maila poczta email, informatyka, komputery
04 reprezentacja informacji
Funkcje Informacyjne Komputera Pokładowego Vectra B [ENG], Motoryzacja
Najczęstsze błędy użytkowników komputerów(2), 7. Szkoła, Technik Informatyk, Komputer Naprawa itp

więcej podobnych podstron