Číselné sústavy
To isté číslo sa dá zapísať rôznymi spôsobmi. Ľudia počítajú v desiatkovej sústave, počítače v dvojkovej a programátori si dlhé rady núl a jednotiek skracujú šestnástkovou. Tu sa naučíš, ako pozičné sústavy fungujú, ako medzi nimi prevádzať čísla a ako počítač zapisuje záporné čísla.
Pozičná číselná sústava
V pozičnej číselnej sústave závisí hodnota číslice od miesta (rádu), na ktorom v čísle stojí. V čísle 505 znamená ľavá päťka päť stoviek, pravá len päť jednotiek. Rímske číslice pozičnou sústavou nie sú — znak X má hodnotu desať, nech stojí kdekoľvek.
Každú pozičnú sústavu určuje jej základ z (prirodzené číslo väčšie ako 1):
- sústava používa práve z rôznych číslic: 0, 1, …, z − 1,
- rády číslujeme sprava od nuly a rád k má váhu zk, teda mocninu základu,
- hodnota čísla je súčet súčinov číslica · váha. Tomuto súčtu hovoríme rozvinutý zápis čísla.
Každé nenulové číslo umocnené na nultú je 1 (z0 = 1), preto má rád úplne vpravo vždy váhu 1. Ak si potrebuješ zopakovať mocniny, pozri tému Mocniny a odmocniny.
Desiatková sústava ako známy príklad
Desiatková (dekadická) sústava má základ 10, číslice 0 až 9 a váhy rádov 1, 10, 100, 1000, … Rozvinutý zápis čísla 2705:
2705 = 2 · 103 + 7 · 102 + 0 · 101 + 5 · 100
| Rád | 3 | 2 | 1 | 0 |
|---|---|---|---|---|
| Mocnina | 103 | 102 | 101 | 100 |
| Váha | 1000 | 100 | 10 | 1 |
| Číslica | 2 | 7 | 0 | 5 |
| Súčin | 2000 | 700 | 0 | 5 |
Súčet súčinov: 2000 + 700 + 0 + 5 = 2705.
Aby bolo jasné, v ktorej sústave je číslo zapísané, píšeme základ ako dolný index: 10112, 2348, 15610, 9C16. Číslo bez indexu je v desiatkovej sústave.
Dvojková, osmičková a šestnástková sústava
V informatike sa popri desiatkovej sústave používajú najmä tri ďalšie:
| Sústava | Základ | Číslice | Váhy rádov (sprava) |
|---|---|---|---|
| dvojková (binárna) | 2 | 0, 1 | 1, 2, 4, 8, 16, … |
| osmičková (oktálová) | 8 | 0 až 7 | 1, 8, 64, 512, … |
| desiatková (dekadická) | 10 | 0 až 9 | 1, 10, 100, 1000, … |
| šestnástková (hexadecimálna) | 16 | 0 až 9, A až F | 1, 16, 256, 4096, … |
Šestnástková sústava potrebuje 16 číslic, preto po deviatke pokračuje písmenami: A = 10, B = 11, C = 12, D = 13, E = 14, F = 15.
Prečo počítače pracujú v dvojkovej sústave
Elektronické súčiastky počítača (tranzistory) spoľahlivo rozlíšia dva stavy: vyššie a nižšie napätie, zapnuté a vypnuté. Dva stavy stačia práve na dve číslice, 0 a 1. Keby mal obvod rozlišovať desať úrovní napätia, stačilo by malé rušenie a číslica by sa prečítala nesprávne. Preto sú všetky údaje v počítači — čísla, texty, obrázky aj zvuk — uložené ako rady núl a jednotiek.
Bit a bajt
Bit (z anglického binary digit, značka b) je jedna dvojková číslica, teda 0 alebo 1. Je to najmenšia jednotka informácie. Osem bitov tvorí bajt (značka B).
Každý pridaný bit zdvojnásobí počet možností, preto n bitmi zapíšeme 2n rôznych hodnôt — čísla od 0 po 2n − 1.
| Počet bitov n | Počet hodnôt 2n | Najväčšie číslo |
|---|---|---|
| 1 | 2 | 1 |
| 2 | 4 | 3 |
| 3 | 8 | 7 |
| 4 | 16 | 15 |
| 8 | 256 | 255 |
| 16 | 65 536 | 65 535 |
| 32 | 4 294 967 296 | 4 294 967 295 |
Jeden bajt má teda 28 = 256 hodnôt a zapíšeme ním čísla 0 až 255.
Čísla 0 až 15 v štyroch sústavách
Dvojkové zápisy sú dlhé a ľahko sa v nich pomýlime. Osmičková a šestnástková sústava slúžia ako ich skrátený zápis — prečo to ide tak ľahko, uvidíš pri rýchlych prevodoch. Dvojkové čísla sú v tabuľke doplnené nulami na štyri bity. Stĺpce dvojkovej a šestnástkovej sústavy sa oplatí vedieť naspamäť.
| 10desiatková | 2dvojková | 8osmičková | 16šestnástková |
|---|---|---|---|
| 0 | 0000 | 0 | 0 |
| 1 | 0001 | 1 | 1 |
| 2 | 0010 | 2 | 2 |
| 3 | 0011 | 3 | 3 |
| 4 | 0100 | 4 | 4 |
| 5 | 0101 | 5 | 5 |
| 6 | 0110 | 6 | 6 |
| 7 | 0111 | 7 | 7 |
| 10desiatková | 2dvojková | 8osmičková | 16šestnástková |
|---|---|---|---|
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
Prevod z desiatkovej sústavy: postupné delenie
Číslo z desiatkovej sústavy prevedieme do sústavy so základom z postupným delením:
- Číslo vydeľ základom z a zapíš podiel aj zvyšok.
- Podiel znova vydeľ základom. Opakuj, kým podiel nie je 0.
- Zvyšky prečítaj odspodu nahor (od posledného k prvému). Sú to číslice výsledku.
Prečo odspodu? Prvý zvyšok hovorí, koľko jednotiek zostalo po rozdelení čísla do skupín po z — je to číslica najnižšieho rádu. Každé ďalšie delenie dáva číslicu o rád vyššie, takže posledný zvyšok je číslica úplne vľavo.
Prevod čísla 45 do dvojkovej sústavy:
| Delenec | Podiel (: 2) | Zvyšok |
|---|---|---|
| 45 | 22 | 1 |
| 22 | 11 | 0 |
| 11 | 5 | 1 |
| 5 | 2 | 1 |
| 2 | 1 | 0 |
| 1 | 0 | 1 |
Výsledok: 4510 = 10 11012. Dlhšie dvojkové čísla píšeme pre prehľadnosť v skupinách po štyroch bitoch, počítaných sprava.
Pri prevode do šestnástkovej sústavy delíme číslom 16 a zvyšky 10 až 15 zapíšeme písmenami A až F. Napríklad pre číslo 500: 500 : 16 = 31, zvyšok 4; 31 : 16 = 1, zvyšok 15 (F); 1 : 16 = 0, zvyšok 1. Zvyšky odspodu sú 1, F, 4, teda 50010 = 1F416.
Prevod do desiatkovej sústavy: rozvinutý zápis
Opačným smerom stačí napísať rozvinutý zápis: každú číslicu vynásobíme váhou jej rádu a súčiny sčítame.
10112 = 1 · 23 + 0 · 22 + 1 · 21 + 1 · 20 = 8 + 0 + 2 + 1 = 1110
| Rád | 3 | 2 | 1 | 0 |
|---|---|---|---|---|
| Mocnina | 23 | 22 | 21 | 20 |
| Váha | 8 | 4 | 2 | 1 |
| Číslica | 1 | 0 | 1 | 1 |
| Súčin | 8 | 0 | 2 | 1 |
Rovnako v ostatných sústavách — šestnástkové písmená len nahradíme ich hodnotou (F = 15):
7F16 = 7 · 161 + 15 · 160 = 112 + 15 = 12710
7778 = 7 · 82 + 7 · 81 + 7 · 80 = 448 + 56 + 7 = 51110
V dvojkovej sústave je to obzvlášť jednoduché: stačí sčítať váhy tých rádov, v ktorých je číslica 1.
Rýchle prevody medzi sústavami 2, 8 a 16
Keďže 8 = 23 a 16 = 24, medzi týmito sústavami netreba prevádzať cez desiatkovú:
- jedna osmičková číslica = trojica bitov,
- jedna šestnástková číslica = štvorica bitov.
Z dvojkovej sústavy
Dvojkové číslo rozdelíme sprava na štvorice (pre šestnástkovú sústavu) alebo trojice (pre osmičkovú). Ak ľavej skupine chýbajú bity, doplníme zľava nuly. Každú skupinu potom nahradíme jednou číslicou. Pre číslo 10 1101 01112 (doplnené nuly sú podčiarknuté):
Štvorice dávajú 10 1101 01112 = 2D716. To isté číslo po trojiciach:
Trojice dávajú 10 1101 01112 = 13278.
Do dvojkovej sústavy
Opačne každú číslicu rozpíšeme na štvoricu (pri osmičkovej sústave trojicu) bitov — vždy na plný počet, aj s nulami na začiatku. Nuly na začiatku celého čísla napokon vynecháme.
Teda A316 = 1010 00112. Podobne 528: číslica 5 je 101 a číslica 2 je 010, spolu 10 10102.
Medzi osmičkovou a šestnástkovou sústavou prevádzame cez dvojkovú: číslice rozpíšeme na bity a tie preskupíme.
Prečo to funguje
Štvorica bitov má hodnotu od 00002 = 0 po 11112 = 15, teda presne toľko, koľko jedna šestnástková číslica. Váhy ďalšej štvorice (16, 32, 64, 128) sú šestnásťnásobkom váh prvej štvorice (1, 2, 4, 8). Celá štvorica sa preto násobí číslom 16 — rovnako ako ďalší rád v šestnástkovej sústave:
1001 11002 = (8 + 0 + 0 + 1) · 16 + (8 + 4 + 0 + 0) = 9 · 16 + 12 = 9C16
Pre trojice bitov a osmičkovú sústavu platí to isté, lebo 8 = 23.
Sčítanie v dvojkovej sústave
Dvojkové čísla sčítavame pod sebou ako desiatkové, len prenos do vyššieho rádu vzniká už pri súčte 2:
0 + 0 = 0, 0 + 1 = 1, 1 + 1 = 102, 1 + 1 + 1 = 112
Pri 1 + 1 teda píšeme 0 a prenášame 1. Pri 1 + 1 + 1 píšeme 1 a prenášame 1. Príklad 10112 + 01102:
| váha | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|
| prenos | 1 | 1 | 1 | ||
| 1 | 0 | 1 | 1 | ||
| + | 0 | 1 | 1 | 0 | |
| súčet | 1 | 0 | 0 | 0 | 1 |
Výsledok je 1 00012. Skúška v desiatkovej sústave: 11 + 6 = 17 a 1 00012 = 16 + 1 = 17. Všimni si, že súčet má päť bitov, hoci sčítance mali len štyri.
Záporné čísla: dvojkový doplnok
Počítač nemá kam napísať znamienko mínus — aj záporné číslo musí uložiť len pomocou núl a jednotiek. Najčastejšie na to používa dvojkový doplnok (doplnkový kód) na pevnom počte bitov n, napríklad 8, 16 alebo 32.
Nezáporné číslo sa zapíše obyčajne dvojkovo a zľava sa doplní nulami na n bitov. Záporné číslo −x dostaneme v troch krokoch:
- zapíšeme x dvojkovo na n bitov,
- invertujeme všetky bity (z 0 urobíme 1 a z 1 urobíme 0),
- pripočítame 1.
Vlastnosti dvojkového doplnku na n bitoch:
- Najvyšší (ľavý) bit je znamienkový: 0 znamená nezáporné číslo, 1 záporné. Tento bit má zápornú váhu −2n−1, ostatné bity majú bežné kladné váhy.
- Rozsah je −2n−1 až 2n−1 − 1. Na 8 bitoch je to −128 až 127, na 16 bitoch −32 768 až 32 767.
- Sčítanie funguje rovnako pre kladné aj záporné čísla, takže počítaču stačí jeden obvod na sčítanie. Prenos z najvyššieho bitu sa zahodí: 5 + (−5) je 0000 0101 + 1111 1011 = 1 0000 0000, na 8 bitoch teda 0.
Ten istý rad bitov môže znamenať dve rôzne čísla — podľa toho, či ho čítame ako číslo bez znamienka, alebo v dvojkovom doplnku:
| 8 bitov | Bez znamienka | V dvojkovom doplnku |
|---|---|---|
| 0000 0000 | 0 | 0 |
| 0000 0001 | 1 | 1 |
| 0111 1111 | 127 | 127 |
| 1000 0000 | 128 | −128 |
| 1000 0001 | 129 | −127 |
| 1111 1011 | 251 | −5 |
| 1111 1111 | 255 | −1 |
Zápis v dvojkovom doplnku prečítame tak, že sčítame váhy jednotkových bitov a váhu najvyššieho bitu berieme zápornú: 1000 0001 je −128 + 1 = −127.
Pretečenie. Ak sa výsledok výpočtu do rozsahu nezmestí, nastane pretečenie (anglicky overflow): na 8 bitoch dá 127 + 1 rad 1000 0000, čo je v dvojkovom doplnku −128. Väčšina programovacích jazykov pritom žiadnu chybu neohlási — výsledok je jednoducho nesprávny.
Kde sa so sústavami stretneš
- Farby na webe. Zápis
#FF8800sú tri bajty v šestnástkovej sústave: červená FF16 = 255, zelená 8816 = 136 a modrá 0016 = 0. Vznikne oranžová . Každá zložka má 256 úrovní, spolu je to 2563 = 16 777 216 farieb. - Adresy. Adresy v pamäti, adresy MAC sieťových kariet (napríklad
00:1A:2B:3C:4D:5E) a adresy IPv6 sa píšu šestnástkovo. Adresa IPv4, napríklad192.168.1.10, sú štyri bajty zapísané desiatkovo — každé z čísel je preto od 0 do 255. - Prístupové práva. V Linuxe sa práva k súboru zapisujú osmičkovo, napríklad
chmod 754. Každá číslica sú tri bity pre čítanie, zápis a spustenie (r, w, x): 7 = 1112 =rwx, 5 = 1012 =r-x, 4 = 1002 =r--. - Veľkosti súborov. Veľkosť súborov a pamäte sa často počíta v mocninách dvoch: 1 KiB = 210 B = 1024 B, 1 MiB = 220 B = 1 048 576 B. Predpony kilo a mega však znamenajú 1000 a 1 000 000, preto disk predávaný ako 500 GB má len približne 465,7 GiB.
Riešené príklady
- Číslo opakovane delíme dvoma a zapisujeme zvyšky:
Delenec Podiel (: 2) Zvyšok 156 78 0 78 39 0 39 19 1 19 9 1 9 4 1 4 2 0 2 1 0 1 0 1 - Zvyšky prečítame odspodu nahor: 1 0 0 1 1 1 0 0
- Výsledok zapíšeme v skupinách po štyroch bitoch: 15610 = 1001 11002
- Skúška rozvinutým zápisom: 128 + 16 + 8 + 4 = 156 ✓
- Šestnástková sústava: číslo rozdelíme sprava na štvorice a každú nahradíme jednou číslicou.
1001 11002 = 9C161001↓91100↓C
- Osmičková sústava: číslo rozdelíme sprava na trojice. Ľavej skupine chýba jeden bit, doplníme nulu.
1001 11002 = 2348010↓2011↓3100↓4
- Skúška prevodom do desiatkovej sústavy: 9 · 16 + 12 = 156, 2 · 64 + 3 · 8 + 4 = 156 ✓
- Číslo 5 zapíšeme dvojkovo na 8 bitov: 0000 0101
- Invertujeme všetky bity: 1111 1010
- Pripočítame 1: 1111 1010 + 1 = 1111 1011
- Výsledok: −5 = 1111 10112 = FB16
- Skúška váhami bitov: −128 + 64 + 32 + 16 + 8 + 2 + 1 = −5 ✓
🧠 Zapamätaj si
- Hodnota čísla je súčet súčinov číslica · váha; váhy rádov sú mocniny základu.
- Z desiatkovej sústavy: delíme základom, zvyšky čítame odspodu. Do desiatkovej: rozvinutý zápis.
- Jedna osmičková číslica = 3 bity, jedna šestnástková = 4 bity. Skupiny tvoríme sprava.
- n bitov = 2n hodnôt. Jeden bajt = 8 bitov = 256 hodnôt (0 až 255).
- Dvojkový doplnok záporného čísla: invertuj bity a pripočítaj 1. Rozsah je −2n−1 až 2n−1 − 1 a najvyšší bit určuje znamienko.
Vyskúšaj si to — prevod medzi sústavami
Zadaj číslo a vyber sústavu, v ktorej je zapísané. Hneď uvidíš jeho zápis vo všetkých štyroch sústavách. Pod výsledkom si zvoľ cieľovú sústavu a zobrazí sa postup prevodu krok za krokom.
Šestnástkové číslice A až F môžeš písať aj malými písmenami. Medzery v čísle sa ignorujú.
Vyskúšaj si to — bity a dvojkový doplnok
Preklápaj bity a sleduj, aké číslo predstavujú — raz bez znamienka, raz v dvojkovom doplnku. Alebo zadaj celé číslo (aj záporné) a pozri si, ako vznikne jeho zápis.
Bit preklopíš kliknutím alebo medzerníkom, klávesmi 0 a 1 ho nastavíš priamo a šípkami ← → prechádzaš medzi bitmi. Fialovo orámovaný najvyšší bit je znamienkový: v dvojkovom doplnku má váhu −128.
Pozri aj
- Deliteľnosť, NSD a NSN — delenie so zvyškom, na ktorom stojí postupné delenie.
- Výroková logika a pravdivostné tabuľky — hodnoty 0 a 1, s ktorými počítajú logické obvody.
- Podrobnejší nástroj v angličtine: Two's Complement Calculator.