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