Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Kod (łac. codex - spis), ciąg składników sygnału (kombinacji sygnałów elementarnych, np. kropek i kresek, impulsów prądu, symboli) oraz reguła ich przyporządkowania składnikom wiadomości (np. znakom pisma); w niektórych zastosowaniach, gł. przy przesyłaniu informacji podlegających utajnieniu, zw. szyfrem; kody są stosowane m.in. w telegrafii, w technice cyfrowej; np. k. binarny, k. ASCII, k. sygnałowy. ● Kodowanie (ang. Encoding) – proces przetwarzania danych źródłowych do innej postaci. ● Dekodowanie (ang. Decoding) – proces odtwarzania danych. ● zakodowanych Kodek jest skrótem od "koder/dekoder", co oznacza urządzenie lub program zdolny do przekształcania strumienia danych lub sygnału. Kodeki mogą zmienić strumień danych w formę zakodowaną (często w celu transmisji, składowania lub zaszyfrowania) lub odzyskać (odkodować) strumień danych z formy zakodowanej, by umożliwić ich odtwarzanie bądź obróbkę. ● Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Kodowanie znakowe polega na stworzeniu sekwencji par znak – liczba naturalna w celu zapisania tak zakodowanych danych w systemach komputerowych lub w celu transmisji. Języki i metodyka programowania Reprezentacja danych w systemach komputerowych ASCII (ang. American Standard Code for Information Interchange) - 7-bitowy kod przyporządkowujący liczby z zakresu 0-127 literom (alfabetu angielskiego), cyfrom, znakom przestankowym i innym symbolom oraz poleceniom sterującym. Przykładowo litera "a" jest kodowana liczbą 97, a polecenie "powrót karetki" – liczbą 13. Litery, cyfry oraz inne znaki drukowane tworzą zbiór znaków ASCII. Jest to 95 znaków o kodach 32-126. Pozostałe 33 kody (0-31 i 127) to tzw. kody sterujące służące do sterowania urządzeniem odbierającym komunikat, np. drukarką czy terminalem. Kod ASCII został po raz pierwszy opublikowany w formie normy w 1967, a jego ostatnia modyfikacja była w 1986. Ponieważ kod ASCII jest 7-bitowy, a większość komputerów operuje na 8-bitowych bajtach, dodatkowy bit można wykorzystać na powiększenie zbioru kodowanych znaków. Powstało wiele różnych rozszerzeń ASCII wykorzystujących ósmy bit (np. norma ISO 8859, rozszerzenia firm IBM lub Microsoft), nazywanych stronami kodowymi. Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Unicode (zwany czasem po polsku Unikod) – komputerowy zestaw znaków mający w zamierzeniu obejmować wszystkie pisma używane na świecie. Definiują go dwa standardy - Unicode oraz ISO 10646. Znaki obu standardów są identyczne. Standardy te różnią się w drobnych kwestiach, m.in. Unicode określa sposób składu. Rozwijany jest przez konsorcjum, w którego skład wchodzą ważne firmy komputerowe, producenci oprogramowania, instytuty naukowe, agencje międzynarodowe oraz grupy zainteresowanych użytkowników. Konsorcjum współpracuje z organizacją ISO. Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Bit (skrót od ang. binary digit) – najmniejsza ilość informacji potrzebna do określenia, który z dwóch równie prawdopodobnych stanów przyjął układ. Jednostka logiczna. Jest to również najmniejsza jednostka informacji używana w odniesieniu do sprzętu komputerowego a oznaczana jest za pomocą b. ● Bajt – najmniejsza adresowalna jednostka informacji pamięci komputerowej, składająca się z bitów. W praktyce przyjmuje się, że jeden bajt to 8 bitów. ● Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Dla oznaczenia większych grup danych stosuje się przedrostki oparte o wielokrotność liczby 1024. Przedrostki binarne (IEC 60027-2) Nazwa Symbol Mnożnik kibibajt KiB 210=1024 mebibajt gibibajt MiB GiB tebibajt pebibajt TiB PiB eksbibajt zebibajt jobibajt EiB ZiB YiB 220=10242 230=10243 240=10244 250=10245 260=10246 270=10247 280=10248 Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Systemy liczbowe: Dwójkowy (binarny) system liczbowy to pozycyjny system liczbowy, w którym podstawą jest liczba 2. Do zapisu liczb potrzebne są więc tylko dwie cyfry: 0 i 1. 0b11001001 = 110010012 ● Dziesiętny (decymalny) system w którym podstawą jest liczba 10. Do zapisu wykorzystuje się cyfry: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. 201 = 20110 ● Szesnastkowy (heksadecymalny) system w którym podstawą jest liczba 16. Do zapisu wykorzystuje się znaki: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. 0xC9 = C916 ● Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Konwersja z systemu binarnego: 110010012 0*2+1= 1 1*2+1= 3 3*2+0= 6 6 * 2 + 0 = 12 12 * 2 + 1 = 25 25 * 2 + 0 = 50 50 * 2 + 0 = 100 100 * 2 + 1 = 201 20110 110010012 16318421 2426 8 128 + 64 + 8 + 1 20110 Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Konwersja na system binarny: 20110 201 / 2 = 100 R 1 100 / 2 = 50 R 0 50 / 2 = 25 R 0 25 / 2 = 12 R 1 12 / 2 = 6 R 0 6/2= 3R0 3/2= 1R1 1/2= 0R1 110010012 Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Konwersja z systemu szesnastkowego: C916 0 * 16 + 12(C) = 12 12 * 16 + 9(9) = 201 C916 11 6 16 * 12(C) + 1 * 9 20110 20110 Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Konwersja na system szesnastkowy: 20110 201 / 16 = 12 R 9 12 / 16 = 0 R 12 C916 Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Konwersja binarny – szesnastkowy: 110010012 1100 1001 C 9 C916 Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Kod uzupełnień do dwóch: ● Kod uzupełnień do dwóch (w skrócie U2 lub ZU2) jest obecnie najpopularniejszym sposobem zapisu liczb całkowitych na bitach. Jego popularność wynika z faktu, że operacje dodawania i odejmowania są w nim wykonywane tak samo jak dla liczb binarnych bez znaku. Z tego też powodu oszczędza się na kodach rozkazów procesora. ● ● W dwójkowym systemie liczbowym najstarszy bit liczby n-cyfrowej ma wagę 2n–1. Jedyną różnicą, jaką wprowadza tu kod U2, jest zmiana wagi tego bitu na przeciwną (–2n–1). Bit ten jest nazywany bitem znaku, ponieważ świadczy o znaku całej liczby – jeśli jest ustawiony (=1) cała liczba jest ujemna, jeśli jest skasowany (=0) – liczba jest dodatnia lub równa 0. Zwiększając obszar zajmowany przez liczbę w kodzie U2 (np. z jednego bajta na dwa), dodawany obszar wypełnia się bitem znaku. Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Kod uzupełnień do dwóch: Reprezentacja liczby -11110: -11110 = NOT (11110) 111 / 2 = 55 R 1 55 / 2 = 27 R 1 27 / 2 = 13 R 1 13 / 2 = 6 R 1 6/2= 3R0 3/2= 1R1 1/2= 0R1 NOT (11011112) = 100100002 Reprezentacja liczby 111110102: 111110102 = NOT (1012) 0*2+1=1 1*2+0=2 2*2+1=5 NOT (5) = –5 Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Kod U2 może być połączony z kodem stałopozycyjnym w celu umożliwienia zapisu liczb niecałkowitych. Liczby takie można traktować jako liczby całkowite przy dodawaniu i odejmowaniu. Przy mnożeniu i dzieleniu wymagane są korekty, jeśli wynik ma mieć w tym samym miejscu przecinek. Zapis stałoprzecinkowy albo stałopozycyjny – jeden ze sposobów zapisu liczb ułamkowych stosowanych w informatyce. Do zapisu liczby stałoprzecinkowej przeznaczona jest z góry określona ilość cyfr dwójkowych (bitów), a pozycję przecinka ustala się arbitralnie, w zależności od wymaganej dokładności. Np.. 0.62510 = 1*0.5 + 0*0.25 + 1*0.125 = 1*2-1 + 0*2-2 + 1*2-3 = 1012 Języki i metodyka programowania Reprezentacja danych w systemach komputerowych Liczba zmiennoprzecinkowa jest komputerową reprezentacją liczb rzeczywistych zapisanych w postaci wykładniczej (zwanej też notacją naukową). Ze względu na wygodę operowania na takich liczbach przyjmuje się ograniczony zakres na mantysę i cechę: - mantysa K-bitowy ułamek M2, - cecha L-bitowy wykładnik całkowity W2 W10 x10 M 10 2 gdzie M10 i W10 są dziesiętnymi odpowiednikami M2 and W2 Powoduje to, że reprezentacja jest tylko przybliżona a jedna liczba zmiennoprzecinkowa może reprezentować różne liczby rzeczywiste z pewnego odcinka.