Reprezentácia údajov v počítači Počítače uchovávajú všetky údaje pomocou čísel. Je teda potrebné vymyslieť spôsob, akým budú nečíselné údaje reprezentované pomocou čísel. Proces nahradenia nečíselných údajov číselnými sa nazýva digitalizácia dát a spôsob, akým sa údaje digitalizujú, voláme kódovanie údajov.
Kódovanie (šifrovanie) je transformácia určitej informácie z jednej formy na druhú pomocou určitého algoritmu s použitím parametra.
Ak je parameter verejný, ide o kódovanie, ak je utajený, o šifrovanie. Kódovať však môžeme údaje i do nečíselnej podoby. Typickým príkladom nečíselného kódovania je Morseova abeceda alebo Braillovo písmo pre nevidiacich.
Kódovanie znakov.
Na rozdiel od čísel, znaky textu nevieme previesť do dvojkovej sústavy, preto bolo potrebné vymyslieť iný spôsob ako jednoznačne priradiť určitému znaku práve jednu kombináciu núl a jednotiek, ktorá tento znak v počítači bude reprezentovať.
Keďže neexistuje žiadny univerzálny spôsob ako to urobiť, každý výrobca počítačov tento problém riešil iným spôsobom, preto existuje viacero znakových kódov. Poriadok do tohto chaosu sa snažil zaviesť americký úrad pre normalizáciu, ktorý vyhlásil jeden spôsob, ktorý by mali všetci používať.
Tento spôsob kódovania sa volá ASCII - American Standard Code for Information Interchange (Americký štandardný kód pre výmenu informácií).
ASCII
ASCII je anglická zkratka pro American Standard Code for Information Interchange, tedy americký standardní kód pro výměnu informací. V podstatě jde o kódovou tabulku která definuje znaky anglické abecedy, a jiné znaky používané v informatice. Jde o historicky nejúspěšnější znakovou sadu, z které vychází většina současných standardů pro kódování textu přinejmenším v euro-americké zóně.
Tabulka obsahuje tisknutelné znaky: písmena, číslice, jiné znaky (závorky, matematické znaky (+-*/% …), interpunkční znaménka (,.:; …), speciální znaky(@$~ …)), a řídící (netisknutelné) kódy, které byly původně určeny pro řízení periferních zařízení (např. tiskárny nebo dálnopisu).
Kód ASCII je podle původní definice sedmibitový, obsahuje tedy 128 platných znaků. Pro potřeby dalších jazyků a pro rozšíření znakové sady se používají osmibitová rozšíření ASCII kódu, která obsahují dalších 128 kódů. Takto rozšířený kód je přesto příliš malý na to, aby pojmul třeba jen evropské národní abecedy. Pro potřeby jednotlivých jazyků byly vytvořeny různé kódové tabulky, význam kódů nad 127 není tedy jednoznačný. Systém kódových tabulek pro národní abecedy vytvořila například organizace ISO.
ASCII Tabuľka
Pre Slovensko druhú polovicu tabuľky stanovuje medzinárodná norma ISO 8859-2, ktorá sa tiež nazýva Latin 2. Firma Microsoft však tento štandard nepoužíva, používa štandard schválený americkým úradom ANSI (American National Standards Institute), označovaný tiež windows-1250.
Tabuľka pre kódovanie Latin 2
UNICODE
Unicode je původně šestnáctibitová tabulka znaků všech existujících abeced, později rozšířená na 31 bitů. Jeho autorem je Unicode Consortium.
Projekt Unicode začal v roce 1988 a byl dovršen v roce 1991 založením Unicode Consortium.
Toto kódovanie používa 16 bitov na zakódovanie jedného znaku, čo umožňuje zakódovať 65536 možných znakov. Tento počet znakov umožňuje zakódovať znaky všetkých abecied pomocou jednej medzinárodnej tabuľky. Tento spôsob kódovania používa i kancelársky balík MS Office. Toto kódovanie zabezpečuje, že ten istý znak má rovnaký kód v každej krajine i na každom type počítača. Nevýhodou tohto kódovania je, že znaky, ktoré sme predtým vedeli zakódovať iba ôsmymi bitmi v kódovaní Unicode, sú kódované 16 bitmi, a teda zaberajú viac pamäte.
Istým vylepšením tohto kódovania je kódovanie UTF-8. V tomto kódovaní je prvých 128 znakov tabuľky ASCII (tieto sú pre všetky krajiny rovnaké), zakódovaných pomocou 8 bitov a zvyšné znaky sú zakódované 16, 24, 32, 40 až 48 bitmi. Toto kódovanie je výhodné pre americky hovoriace krajiny a krajiny, v ktorých väčšinu znakov textu tvorí prvých 128 znakov tabuľky ASCII.
Standard Unicode se oproti ISO 10646 navíc zabývá implementací algoritmů pro písma psaná zprava doleva (arabština), podporou oboustranných textů (jako např. směs hebrejštiny a latinky), algoritmy pro řazení a porovnávání textů. Bohaté možnosti Unicode mají i nevýhody, především vznikají problémy s nekompatibilitou se staršími aplikacemi, které jsou orientovány na jednobytové znaky. Také velmi narůstá délka textů. Textové řetězce v Unicode mohou obsahovat byty, které mají zvláštní význam pro programovací jazyky (např. binární nuly), nebo operační systémy (např. lomítka oddělující adresáře ve specifikaci souboru). Z tohoto důvodu byl navržen systém kódování znaků Unicode, nazývaný UTF (UCS Transformation Format ). Nejpoužívanější variantou je UTF-8, popsaný v ISO 10646-1:2000 Annex D a také v RFC 3629. Formát UTF-8 kóduje znaky Unicode do sekvence 1 až 6 bytů. Pro českou abecedu stačí pro znaky bez diakritiky jeden byte a pro znaky s diakritikou dva byty.
UTF kódování odstraňuje všechny nevýhody neupraveného Unicode. Dále existují formáty UTF-16 a UTF-32. V současné chvíli existuje Unicode ve verzi 5.0.0, které vyšlo v roce 2006. Oproti předchozí 4.1.0 bylo do nové verze zařazeno 1 369 nových znaků. Celkem se jejich počet rozšířil na 238 676 znaků a symbolů různých jazyků. Unicode Consortium již v této chvíli zaručuje, že všechny nové verze budou zpětně kompatibilní s předchozími, tj. že nové standardy budou přidávat další znaky, ale žádné již nebudou odstraňovat ani měnit.
Znaky Unicode
Znak Unicode může být až 31 bitů dlouhý. Tento rozsah (maximálně 231= 2147483648 různých znaků) pokrývá všechny známé znakové sady jazyků na Zemi, včetně japonského nebo čínského písma. Používá se dále pro fonetické abecedy (pro zápis výslovnosti), speciální vědecké a matematické symboly, kombinované znaky a podobně. Každý znak má jednoznačný číselný kód a svůj název.
Aplikace
Některé starší aplikace (dosud) UTF-8 nepodporují. Na druhé straně pro některé systémy je UTF-8 již jedinou používanou znakovou sadou, např. jazyk Java nebo XML. Unicode pro vnitřní zápis znaků používá Microsoft Office od verze 97.
Kódovanie čísel v počítači.
Všetky údaje v počítači sú kódované pomocou rôznej kombinácie hodnôt bitov - najmenšej jednotky informácie. Každý z bitov môže nadobúdať iba dve rôzne hodnoty 0 a 1.
Tieto bity sú však do pamäťových buniek počítača ukladané po osmiciach ( bajt ), preto je výhodné na zakódovanie údajov použiť vždy taký počet bitov, ktorý je deliteľný ôsmimi (8,16,24,32 ....). Čím väčší počet bitov použijeme, tým väčší rozsah čísel môžeme použiť. Napríklad pomocou 8 bitov dostaneme 28 = 256 rôznych kombinácií núl a jednotiek. Pomocou 8 bitov teda môžeme zakódovať napríklad čísla od 0 do 255 alebo čísla od -128 do 127 v prípade, že potrebujeme i záporné čísla.
Na kódovanie čísiel v počítačoch je najvýhodnejšie použiť jedno „slovo“ (Word), t.j. taký počet bitov, ktoré počítač dokáže spracovať počas jednej operácie (jedného taktu procesora). Najmodernejšie počítače dnes používajú 64 bitové slovo, teda dokážu spracovať 64 bitov pri jednej operácií.
Kódovanie prirodzených čísel a nuly.
Obrovskou výhodou je fakt, že každé číslo môžeme previesť do dvojkovej sústavy, ktorá používa iba cifry 0 a 1, čím pre každé číslo dostaneme jednoznačný zápis. Prirodzené čísla sú teda v počítači uložené v tzv. priamom kóde , čo je vlastne číslo prevedené do dvojkovej sústavy.
• Pri použití jedného Bajtu (8 bitov) môžeme zakódovať 256 možných hodnôt, t.j. hodnoty 0 až 255
• Pri použití 2 Bajtov (16 bitov) hodnoty 0 až 65535
• Pri použití 4 Bajtov (32 bitov) hodnoty 0 až 4 294 967 295
• Pri použití 1 slova moderného počítača (64 bitov) hodnoty 0 až 18 446 744 073 709 551 615, čo sú už astronomické čísla.
Kódovanie celých čísel.
Pri celých číslach je potrebné zohľadniť i znamienko. Našťastie sú znamienka len dve (+, -), preto ich môžeme zakódovať 1 bitom (0 = +, 1= -). Pri kódovaní celých čísel sa znamienko zakóduje vždy prvým bitom zľava. Napr. pri použití 1 Bajtu bude 10011101 kód pre -29.
• Pri použití 1 Bajtu (8 bitov - 1 bit znamienko a 7 bitov hodnota), môžeme zakódovať hodnoty -128 až +127
• Pri použití 2 Bajtov (16 bitov -1 bit znamienko a 15 bitov hodnota), môžeme zakódovať hodnoty -32 768 až +32 767
• Pri použití 4 Bajtov (32 bitov - 1 bit znamienko a 31 bitov hodnota), môžeme zakódovať hodnoty -2 147 483 648 až +2 147 483 647
• Pri použití 4 Bajtov (64 bitov - 1 bit znamienko a 63 bitov hodnota), môžeme zakódovať hodnoty -9 223 372 036 854 775 808 až +9 223 372 036 854 775 807
Kódovanie reálnych čísel.
Reálne čísla môžeme do počítača kódovať dvoma spôsobmi:
1. Ako čísla s pevnou rádovou čiarkou (tento spôsob sa väčšinou používa na uloženie meny napr.: 24,50 Sk). Pri tomto spôsobe je niekoľko bitov vyhradených pre celú časť čísla a niekoľko pre desatinnú časť čísla. Ak nám pri nejakej operácii dostaneme väčší počet desatinných miest ako môžeme zakódovať pomocou vyhradeného počtu bitov, vtedy sa zvyšné miesta jednoducho odrežú a nebudú do pamäte počítača uložené.
2. Ako čísla s pohyblivou rádovou čiarkou – tu je vyhradených niekoľko bitov pre hodnotu čísla (mantisu) a zvyšok je vyhradený pre exponent. Napr.: číslo 126,567 je uložené ako 126567.10-3 . V našom prípade je mantisa 126567 a exponent -3. Obe tieto hodnoty sú uložené samozrejme v priamom kóde a majú 1 bit vyhradený pre znamienko.
BCD KÓD
Kód BCD (Binary Coded Decimal) je jedným z najčastejšie používaných kódov na reprezentovanie desiatkových čísel. Pri tomto kóde je každá desiatková číslica zakódovaná pomocou štyroch bitov, tak ako to znázoňuje nasledujúca tabuľka.
Tento kód kvôli rôznym výhodám či nevýhodám bol rôzne modifikovaný. Boli pozmenené váhové stavy jednotlivých bitov kódu, preto sa začali tieto váhy dopisovať za označenie kódu BCD. Klasickému kódu prislúcha kód 8421, kde prvý bit sprava má váhu čísla 1, druhý váhu čísla 2, tretí váhu čísla 4 a posledný váhu čísla 8. Napríklad číslo BCD 8421 kóde 0111 predstavuje číslicu 7 (8.0 + 4.1 + 2.1 + 1.1). Známe sú tiež kódy BCD 2421, BCD 84-2-1 alebo kód BCD 8421 firmy IBM, ktorý nulu kódoval bitmi 1010.
Toto kódovanie umožňuje uložiť dve číslice do jedného bajtu alebo zvyšné štyri bity vyplniť nulami tak ako je to definované v kóde EBCDI, čí štvorbajtím 0011 ako definuje kód ASCII. Konverzia takto kódovaných čísel do všetkých systémov (vrátane systémov používajúcich kódovanie UNICODE) je triviálna. Kód sa výborne hodí na zobrazovanie číslic v digitálnych prístrojoch, ktoré zobrazujú číselné hodnoty pomocou tzv. sedem segmentového displeja.