Kódovanie (informatika)

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 ôsmich, 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 2⁸ = 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ácii.

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ž 65 535.
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.
V niektorých prípadoch (napríklad pri prenose) je vhodnejšie použiť iný kód ako je zápis čísla v dvojkovej sústave. Jedným z takýchto kódov je kód BCD.

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
Celé čísla sú v pamäti počítača ukladané v priamom kóde ale pre počítanie s nimi je vhodnejší doplnkový kód, ktorý získame z inverzného kódu.

Kódovanie reálnych čísel

Reálne čísla môžeme kódovať dvoma spôsobmi:
Ako čísla s pevnou rádovou čiarkou (tento spôsob sa väčšinou používa na uloženie meny napr.: 24,50 EUR). 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žú (prípadne sa číslo zaokrúhli na príslušný počet dvojkových cifier) a nebudú do pamäte počítača uložené.
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⁻³. 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.

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í).
Tento štandard hovorí, že na zakódovanie každého znaku sa použije 7 bitov. Čo umožňovalo definovať kód pre 128 znakov. Neskôr sa kódovanie rozšírilo na 8 bitov a 256 znakov. Pritom prvá polovica znakov je pre všetky krajiny rovnaká a zvyšných 128 znakov sa pre každú krajinu stanovil podľa ich potrieb. Tento spôsob vniesol do kódovania znakov chaos (veľmi veľké množstvo regionálnych znakových sád), navyše pre znaky niektorých písiem 7-bitový priestor nestačil. Vznikol preto nový spôsob kódovania UNICODE.
Toto kódovanie používa 16 a 24 bitov (2 či 3 bajty) na zakódovanie jedného znaku, čo umožňuje zakódovať cca 1,1 milióna možných znakov. Tento počet znakov umožňuje zakódovať znaky všetkých relevantných abecied pomocou jednej medzinárodnej tabuľky. 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 ôsmimi bitmi (jedným bajtom) v ACSII, v Unicode sú kódované 16 a 24 bitmi (dvomi a tromi bajtami), a teda zaberajú viac pamäte ako by zaberal text v kódovaní ASCII. Istým riešením tohoto problému je formát 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 a 24 či 32 bitmi (t.j. dvami, tromi alebo štyrmi bajtami). Toto kódovanie je výhodné pre anglicky hovoriace krajiny a krajiny, v ktorých väčšinu znakov textu tvorí len prvých 128 znakov tabuľky ASCII. Ďalšia výhoda je spätná kompatibilita so softvérom, pôvodne navrhnutým pre ASCII resp. 8-bitové znakové sady.