1 Reprezentacja danych Różne sposoby przechowywana

Transkrypt

1 Reprezentacja danych Różne sposoby przechowywana
Reprezentacja danych
Różne sposoby przechowywana danych w komputerze
- Wszelka informacja przetwarzana przez system komputerowy jest ciągiem zer i
jedynek. Niczym więcej.
- Z punktu widzenia systemu KAŻDA informacja to strumień zer i jedynek.
- Ten sam ciąg zer i jedynek raz może być zdjęciem naszego przyjaciela innym
razem Koncertem Bacha, a jeszcze innym razem listem do cioci. TEN SAN CIĄG! To
od nas zależy jak komputer będzie dany ciąg zer i jedynek rozumiał.
- To my, czyli użytkownik, mówimy jak interpretować dany ciąg zer i jedynek.
- Od sposobu interpretacji zależy co tak naprawdę odczytamy.
- To nie plik graficzny informuje nas o tym, że jest plikiem graficznym, ale to my
plik interpretujemy jak gdyby był plikiem graficznym (Oczywiście większość
współczesnych plików zawiera w sobie informacje o przenoszonych danych, ale
jest to tylko i wyłącznie po to aby ułatwić Życie.)
Kilka analogii
Analogia językowa
Co oznacza słowo: para
jeśli wiemy, że jest to słowo języka polskiego, to: coś;
jeśli wiemy, że jest to słowo języka angielskiego, to: coś innego.
Mimo że tak samo się pisze i tak samo wymawia, ale w zależności od języka znaczy co
innego.
Analogia liczbowa
Liczba osiem może być zapisana jako
8 w dziesiętnym systemie liczbowym;
VIII w rzymskim systemie liczbowym;
1000 w dwójkowym systemie liczbowym.
O kodowaniu czego mówić będziemy
znaki alfanumeryczne
liczby naturalne
liczby całkowite
liczby rzeczywiste
plik graficzny bmp
pakiet TCP/IP
1
Znaki alfanumeryczne
Znakiem alfanumerycznym nazywamy litery, cyfry a także pewne symbole jak np. (, :, +
itp. czyli wszystko to co możemy wpisać z klawiatury.
Kodowanie
Kodowaniem nazwiemy proces zamiany znaku wpisanego z klawiatury lub innego urządzenia
wczytującego na jego reprezentacje cyfrowa, czyli zapisanie jego przy pomocy ciągu zer i
jedynek.
ASCII American Standard Code for Information Interchange. W kodowaniu tym określono
kody dla:
małych (97-122) i dużych (65-90) liter alfabetu łacińskiego;
cyfr (48-57);
pewnej grupy znaków jak np. (, :, + itp. (32-47, 58-64, 91-96, 123-126);
niedrukowalnych znaków sterujących przepływem danych, np. ACK – potwierdzenie,
czy BEL – sygnał dźwiękowy (0-31).
Kodowanie w tym standardzie było najwcześniejsze. Dzięki niemu możemy zakodować każdy
znak alfanumeryczny. Koduje na liczbach 0-126, jest jeszcze liczba 127 ale ona jest inną
bajką. By zapisać 126 liczb potrzebujemy 7 bitów. A większość komputerów zwłaszcza z
dawnych czasów wykorzystywała 8 bitów lub wielokrotność 8, dlatego mimo że potrzeba
było 7 bitów to i tak rezerwowano tych bitów osiem, czyli 0-255, zatem pierwsze 128 miejsc
było wykorzystywanych, a pozostałe 128 już nie.
Znaki alfanumeryczne
Zakres kodów ASCII rozciąga się od 0 do 127, czyli wymaga wykorzystania co
najmniej 7 bitów. Ponieważ większość komputerów była 8-bitowa (czyli posługująca się
informacjami dzielonymi na kawałki po 8 bitów), wiec pozostawało jeszcze 128 wolnych
miejsc o numerach od 128 do 255. Znaki ASCII nie pokrywały zapotrzebowania narodowości
posługujących się literami alfabetu łacińskiego ze specyficznymi znakami diakrytycznymi
(Niemcy, Polska) lub wręcz zupełnie niestandardowymi znakami (Grecja, Rosja). Ze względu
na powstałe zapotrzebowanie, do reprezentacji znaków narodowych wykorzystano wolne 128
pozycji.
Szkoda tylko, ze każda narodowość zrobiła to niezależnie od innych. W ten oto
sposób powstały strony kodowe, czyli zestawy 255 znaków o wspólnej pierwszej połowie,
natomiast różniące się zasadniczo w drugiej. Dlatego manipulując jakimkolwiek tekstem,
jeśli chcemy poprawnie odczytać niestandardowe znaki alfabetu łacińskiego, MUSIMY
wiedzieć przy pomocy jakiej strony kodowej został on zapisany. Czyli posługując się jedną
stroną kodową nie mogliśmy napisać czegoś w wielu językach, bo na jednej stronie są znaki
tylko jednego języka. Poza tym dla niektórych języków typu polski było tak, że powstało
kilka stron kodowych, bo autorzy nie chcieli się dogadać…
Strony kodowe znaków polskich
2
ISO 8859-2, nazywane także latin2, jest kodowaniem charakterystycznym dla systemów
rodziny UNIX-owych. Obecne na prawie całym świecie.
CP 1250, nazywane także win-1250, jest kodowaniem charakterystycznym dla systemów
rodziny Windows. Część kodu się pokrywa z powyższym, ale tylko część, dlatego dokumenty
przeniesione z Unixa na windowsa ma część polskich znaków, ale tylko część.
Mazowia –kodowanie opracowane na potrzeby polskiego komputera Mazovia.
Unicode – o tym dalej. Ostatnio właśnie on obowiązuje i jest po to, by zaradzić istniejącym
problemom niejednoznaczności kodowania, bo każdy kodował wg innej strony kodowej czy
jak pracujemy nad dokumentem wielojęzycznym. Obecnie w Unicode istnieją wszystkie znaki
jakie zna ludzkość. WWW.unicode.org
Problemy
Oczywisty – wiele różnych stron kodowych nawet dla tego samego języka.
Trudności z obsługa tekstów wielojęzycznych.
Zbyt mała przestrzeń dla kodów niektórych języków, np. chiński.
Unicode – najważniejsze cechy
Jednoznaczność.
Jeden kod odpowiada jednemu znakowi i odwrotnie. ZAWSZE.
Uniwersalność.
Wszystkie powszechnie używane języki oraz symbole są tu dostępne, jest nawet pismo
ludów pierwotnych. Czyli bez względu Nd jakim dokumentem pracujemy możemy wyrazić
wszystkie znaki jakie są nam potrzebne.
Efektywność.
Identyfikacja znaku nie zależy od sekwencji sterującej czy znaków następujących bądź
poprzedzających. Bo np. chińczycy nie chcieli czekać aż będą stworzone znaki dla nich i
wymyślili sekwencje sterujące, czyli znaki, które potem zmieniają znaczenie następnych
znaków np. często znakiem sterującym był esc i my też tak będziemy pisać
%BG oznacza %BG to po prostu napis
escBG oznacza np., jakiś znaczek w języku chińskim
Manipulowanie tekstem zapisanym w ten sposób z sekwencją sterującą było bardzo
uciążliwe, trzeba było uwzględniać nie tylko sam znak, ale też jego otoczenie.
Identyfikacja nie reprezentacja.
Istotny jest dla nas sam znak a nie jego wygląd.
Znaczenie.
Własności znaków (np. kolejność alfabetyczna) nie zależą od położenia w tabeli kodów, ale
są określone w tablicy własności. Łatwo jest teksty sortować alfabetycznie dzięki tym
tablicom własności określającym też zależności między danymi znakami.
Czysty tekst.
Nie zapisuje Unicode informacji o tym, jak ma być tekst zapisany, nie ma żadnego
formatowania ani nic takiego.
3
Logiczny porządek.
W unicode zawsze zapisujemy informację w takiej kolejności w jakiej jest ona rzeczywiście
pisana, Unicode nie wnika w to czy w języku się pisze od prawej do lewej czy odwrotnie.
Czyli jak piszemy normalnie od prawej to w unicode będzie to zapisane od lewej tak
normalnie ze pierwszy znak od prawej skoro jest pierwszy to będzie zapisany jako pierwszy
z lewej a potem program dba o prawidłowe wyświetlenie tego.
Ujednolicenie.
Identyczne znaki o różnym znaczeniu zastąpiono jednym. Typu przecinek czasami jest
separatorem w liczbie w setkach w jednym języku, separatorem dziesiątek w innym itp. I te
wszystkie przecinki skoro tak samo wyglądają, to mimo że mają różne znaczenie to jest to
wszędzie jeden i ten sam przecinek w unicodzie.
Kodowanie liczb naturalnych
Naturalny zapis wykorzystywany do zapisu liczby w dwójkowym systemie liczbowym.
Kodowanie liczb całkowitych
znak-moduł
uzupełnieniowa do dwóch (U2)
Uzupełnienie dwójkowe
Uzupełnieniem dwójkowym liczby x, zapisanej za pomocą n bitów, nazywamy liczbę
xU 2
2n x
Kodowanie liczb rzeczywistych
zapis stałoprzecinkowy
zapis zmiennoprzecinkowy z m M 2
zC C
Zapis zmiennoprzecinkowy – przykład
Przyjmujemy następujące założenia
wykorzystujemy 8 bitów;
pierwszy bit od lewej (7) oznacza znak liczby;
bity (6-4) oznaczają mantysę;
bity (3-0) oznaczają cechę;
stała KC przyjmuje wartość 7.
4

Podobne dokumenty