Všechna data v počítači jsou reprezentovaná posloupností 0 a 1, tzv. bitů. Proto se čísla v počítačích kódují pomocí binární (dvojkové) soutavy, která využívá pouze 0 a1.

Jiné způsoby kódování čísel

V běžném životě jsme zvyklí zapisovat čísla v desítkové soustavě, ve které používáme deset různých cifer a jejich pozice odpovídá mocninám desítky. Tedy například 358 značí 8 jednotek, 5 desítek a 3 stovky. To je jeden z mnoha možných způsobů kódování.

Jak bychom mohli zakódovat 358 jinak? Třeba tak, že bychom udělali 358 čárek vedle sebe. Nebo bychom se mohli domluvit, že drak bude znamenat 100, prase 50 a zajíc 2. Potom bychom 358 mohli znázornit obrázkem, na kterém budou tři draci, prase a čtyři zajíci.

Počítače umí dobře rozlišovat mezi dvěma stavy (aktivní a neaktivní), proto používají binární (dvojkovou) soustavu. Kromě binární soustavy v informatice občas narazíme i na soustavy založené na mocninách dvojky, například osmičkovou či šestnáctkovou (hexadecimální) soustavu. S hexadecimálním zápisem čísel se můžeme potkat při práci s RGB barvami.

Témata

  • Binární čísla: základy – Základní princip binární soustavy není nijak specifický pro počítače. Procvičíte si zde převod mezi desítkovou a binární soustavou.
  • Bity a bajty – Specifika reprezentace binárních čísel v počítači, například určení, kolik bitů paměti potřebujeme.
  • Záporná a desetinná binární čísla – Téma představuje různé způsoby, jak rozšířit binární zápis na záporná a desetinná čísla.
  • Počítání v binární soustavě – Sčítání, odčítání a násobení binárních čísel funguje podobně jako počítání v desítkové soustavě.
  • Bitové operace – Propojení binárních čísel s tématem logiky skrze logické operace nad všemi bity současně.
  • Hexadecimální čísla – V informatice se lze setkat i s šestnáckovou (hexadecimální) soustavou, která používá 16 symbolů (0–9, A–F).
Nahoru

Binární čísla: základy

Přejít ke cvičením na toto téma »

V binární (dvojkové) soustavě zapisujeme čísla pouze pomocí dvou číslic: 0 a 1. Pozice každé číslice v zápisu odpovídá určité mocnině dvojky. Mocniny vždy začínají nultou mocninou u číslice nejvíc vpravo a zvyšují se směrem doleva. Hodnotu binárního čísla pak spočteme jako součet těchto mocnin. Každou mocninu započítáme, pokud je na příslušné pozici 1 nebo nezapočítáme, pokud je na daném místě 0.

Značení soustav

Abychom odlišili, jestli mluvíme o čísle v binární nebo v desítkové soustavě, přidáváme k číslům dolní indexy značící soustavu. Například číslo 5 v desítkové soustavě budeme psát jako 5_{10}, binární číslo s hodnotou 5 napíšeme jako 101_2. Potom můžeme jasně rozlišit, že například zápisem 11_{10} myslíme desítkové číslo 11, zatímco zápis 11_2 budeme interpretovat jako binární číslo 11 a tedy desítkové číslo 3.

Intuitivní pomůcka

Pro základní představu o binárních číslech můžeme použít pomůcku, kterou máme vždy po ruce – totiž ruku samotnou. Představme si, že si na prsty ruky napíšeme mocniny dvojky:

Pak můžeme na prstech jedné ruky počítat nejen do pěti, ale až do třiceti jedné. Každé číslo lze totiž vyjádřit (jednoznačně) jako součet mocnin dvojky. Pokud polohu prstů zaznačíme pomocí nul a jedniček, dostaneme zápis v binární soustavě.

Příklady čísel zapsaných v binární soustavě

desítkově součet mocnin binárně
1 1 1
2 2 10
3 2+1 11
4 4 100
5 4+1 101
6 4+2 110
7 4+2+1 111
8 8 1000
9 8+1 1001
10 8+2 1010
16 16 1⁠0000
20 16+4 1⁠0100
30 16+8+4+2 1⁠1110

Vtip pro zpestření

Nahoru

Bit je nejmenší jednotka informace. Může mít pouze dvě různé hodnoty, 0 nebo 1. Bity se sdružují do bajtů (často psáno anglicky jako byte), jeden bajt se skládá z 8 bitů. Bit značíme malým b, bajt velkým B.

Proč zrovna 8 bitů?

Bajt je nejmenší jednotka dat, se kterou počítač operuje. Neexistuje fundamentální důvod, proč by tato jednotka měla být právě 8 bitů, kromě toho, že je to „tak akorát“. Do příliš malého bajtu by se nevešel ani jeden znak abecedy, příliš velký bajt by vedl k plýtvání pamětí.

V počátcích pracovaly různé počítače s různě velkými bajty (např. 7 bitů, 10 bitů), ale časem se 8 bitů stalo standardem. Moct se spolehnout na jednotnou velikost bajtu je totiž extrémně výhodné, například aby jeden program mohl bez potíží fungovat na různých počítačích.

Násobné jednotky

Pro označení velkého množství bajtů se používají násobné jednotky. Například 1 kB = 1000 B a 1 MB = 1 000 000 B. Procvičit si je můžete v tématu Informace, velikost dat.

Bity v binárních číslech

Název „bit“ vznikl složením anglických slov binary digit (česky „dvojková číslice“). Při zápisu čísel ve dvojkové soustavě totiž každá číslice odpovídá jednomu bitu. Například číslo 1100_2 má 4 bity. Nejlevější bit se označuje jako nejvyšší či nejvýznamnější, protože má největší váhu (2^{N-1}, kde N je počet bitů). Naopak nejpravější bit se někdy označuje jako nejnižší či nejméně významný, protože má nejmenší váhu (2^0 = 1).

Kolik bitů potřebujeme?

Pomocí 1 bitu lze rozlišit jen 2 hodnoty (např. zapnuto/vypnuto). S každým dalším bitem se však počet možných hodnot zdvojnásobí. Takže pomocí 2 bitů rozlišíme 4 hodnoty (např. světové strany), pomocí 3 bitů až 8 hodnot (např. den v týdnu) a pomocí 4 bitů až 16 hodnot (např. měsíc v roce). Obecně platí, že, pomocí N bitů lze rozlišit 2^N různých hodnot. Například v 8 bitech (1 bajtu) lze uložit 2^8 = 256 různých hodnot.

Rozsahy hodnot

Pokud ukládáme celá nezáporná čísla pomocí 4 bitů, pak bude nejnižší hodnota 0000_2 = 0 a nejvyšší hodnota 1111_2 = 2^4 - 1 = 16 - 1 = 15. Obecně pro N bitů bude nejvyšší hodnota 111...1_2 = 2^N - 1.

Bitů Hodnot Rozsah
4 2⁴ = 16 0–15
5 2⁵ = 32 0–31
6 2⁶ = 64 0–63
7 2⁷ = 128 0–127
8 2⁸ = 256 0–255
16 2¹⁶ = 65 536 0–65 535
Nahoru

Záporná a desetinná binární čísla

Přejít ke cvičením na toto téma »

V počítači často potřebujeme pracovat se zápornými nebo desetinnými čísly. Protože však počítače používají pouze nuly a jedničky, je potřeba tato čísla nějakým způsobem zapisovat bez použití mínusu nebo desetinné čárky.

Záporná čísla

Existuje více způsobů, jak zapisovat záporná čísla. Obvykle máme daný určitý počet bitů, se kterými můžeme pracovat, často jeden bajt.

V přímém kódu první bit zleva slouží pro uchování znaménka čísla. Obsahuje 0, pokud je číslo kladné, a 1, pokud je záporné. Na ostatních 7 bitů se zapíše absolutní hodnota čísla. Číslo 5_{10} se tedy v jednom bajtu zakóduje jako 0000 0101 a -5_{10} jako 1000 0101.

V inverzním kódu nejprve zapíšeme absolutní hodnotu čísla. Pokud je číslo kladné, dál neděláme nic. Pokud je záporné, obrátíme hodnotu všech bitů (vyměníme 0 za 1 a naopak). Číslo 5_{10} se tedy v jednom bajtu napíše jako 0000 0101 a -5_{10} jako 1111 1010.

Kódování v doplňkovém kódu (dvojkovém doplňku) začíná podobně jako v inverzním. Nejprve napíšeme absolutní hodnotu čísla a pokud je číslo kladné, dál nepokračujeme. Pro záporná čísla provedeme obrácení (inverzi) bitů a následně ještě přičteme jedničku. Číslo 5_{10} tedy v jednom bajtu zapíšeme jako 0000 0101 a -5_{10} jako 1111 1010 + 1 = 1111 1011. Pokud chceme získat hodnotu záporného čísla nebo obrátit znaménko zpět do plusu, provedeme ten samý sled operací. Nejprve obrátíme všechny bity a poté přičteme 1. Pro číslo -5_{10} by to vypadalo následovně: inverze bitů: 1111 1011 → 0000 0100, přičtení jedničky: 0000 0100 + 1 = 0000 0101. Získali jsme číslo 5_{10}.

Ve všech třech kódech poznáme záporné číslo podle toho, že má na prvním místě zleva 1. Kladná čísla na této pozici vždy obsahují 0.

Desetinná čísla

Desetinná čísla mohou být velmi dlouhá, občas mají dokonce nekonečný zápis. Počítače však mají omezený prostor v paměti, proto se i desetinná čísla ukládají na omezený počet bitů. Tento způsob reprezentace se nazývá zápis s plovoucí desetinnou čárkou a kvůli zmenšenému prostoru může být občas trochu nepřesný.

V zápisu s plovoucí desetinnou čárkou se číslo ukládá pomocí dvou hodnot: mantisy a exponentu. Ve speciálním bitu se navíc uchovává znaménko čísla, pro kladná se uloží 0 a pro záporná 1.

Mantisa představuje základ čísla – v podstatě jsou to číslice použité v zápisu. Desetinná čárka se v mantise nachází vždy na předem dohodnuté pozici, často například za první číslicí zleva. Čím větší prostor (počet bitů) máme na mantisu, tím přesněji můžeme číslo uložit.

Exponent je počet míst, o které se má desetinná čárka v mantise posunout, abychom dostali původní číslo. Kladný exponent znamená posun směrem doprava, čímž se číslo zvětšuje. Záporný exponent značí posun desetinné čárky doleva, tím se číslo víc přibližuje nule. Čím víc místa máme na exponent, tím větší rozsah hodnot můžeme ukládat.

Například číslo 1101{,}001_2 bude mít mantisu 1{,}101 001_2 a exponent 3_{10}. Ve znaménkovém bitu bude 0.

Na obrázku je příklad, jak může být jedno číslo uloženo v paměti počítače na 32 bitech (4 bajtech).

Nahoru

Počítání v binární soustavě

Přejít ke cvičením na toto téma »

Pokud zvládáme základní princip binární soustavy, můžeme se pustit do aritmetických operací.

Sčítání binárních čísel

Binární čísla můžeme sčítat pod sebou velmi podobně, jako jsme zvyklí sčítat čísla v desítkové soustavě. Jediný rozdíl nastává, pokud sčítáme dvě jedničky. Protože 1_2 + 1_2 = 10_2, v takovém případě zapíšeme 0 a přenášíme 1 do vyššího řádu.

Odčítání binárních čísel

Odčítání binárních čísel funguje obdobně. K přenosu dochází pouze při počítání rozdílu 0_2 - 1. V takovém případě si „vypůjčíme“ jedničku z vyššího řádu – jako bychom počítali 10_2 - 1_2. Potom zapíšeme 1 a v dalším řádu navíc odečteme jedničku, kterou jsme si půjčili.

Násobení binárních čísel

Násobení binárních čísel je také téměř stejné jako u desítkových čísel. Násobíme tak, jako kdybychom měli dvě desítková čísla složená pouze z nul a jedniček. Sčítání řádků vzniklých násobením potom probíhá jako binární sčítání, které je popsáno výše.

Pokud máme binární číslo násobit mocninou dvojky, můžeme si práci velmi ulehčit. Stačí pouze přidat na konec čísla tolik nul, kolikátou mocninou dvojky násobíme. Například při násobení dvěma přidáváme 1 nulu (2 = 2^1), při násobení osmi přidáváme 3 nuly (8 = 2^3). Celočíselné dělení mocninou dvojky je také jednoduché, stačí odstranit tolik posledních číslic z dělence, kolikátou mocninou dvojky dělíme.

Nahoru

Bitové operace spojují logiku s binárním zápisem čísel. Provádějí logické úkony přímo nad jednotlivými bity binárních čísel, podle čehož také dostaly svůj název. Na rozdíl od běžné aritmetiky zde neexistuje žádný „přenos do vyššího řádu“ (carry). Každá pozice v čísle se zpracovává izolovaně. Bitové operace se vyznačují také tím, že nepracují jen s jedním bitem, ale s celou posloupností bitů najednou.

Logické operace

Logické operace jsou typickou ukázkou bitových operací. Mezi nejčastěji používané patří bitová negace (NOT), konjunkce neboli součin (AND), disjunkce neboli součet (OR) a neekvivalence (XOR). Více se logickým spojkám věnuje sekce logiky.

Příklady logických operací

Unární bitová operace NOT vezme jeden binární řetězec a kažou hodnotu v něm změní na opačonu; tedy z každé 0 udělá 1 a z každé 1 udělá 0.

  • Z řetězce 1⁠0100 udělá řetězec 0⁠1011.
  • Z řetězce 1⁠1111 udělá řetězec 0⁠0000.
  • Z řetězce 0⁠0000 udělá řetězec 1⁠1111.

Binární bitové operace vezmou dva řetězce stejné délky a zkombinují je do jednoho nového řetězce bit po bitu:

  • Operace AND udělá z řetězců 1⁠1010 a 0⁠1110 řetězec 0⁠1010
  • Operace AND udělá z řetězců 1⁠1110 a 0⁠0110 řetězec 0⁠0110
  • Operace OR udělá z řetězců 1⁠0010 a 0⁠0011 řetězec 1⁠0011
  • Operace OR udělá z řetězců 1⁠1110 a 0⁠0111 řetězec 1⁠1111
  • Operace XOR udělá z řetězců 1⁠0010 a 0⁠0011 řetězec 1⁠0001
  • Operace XOR udělá z řetězců 1⁠1110 a 0⁠0111 řetězec 1⁠1001

Posuny

Dalším častým druhem operací jsou posuny. Posun, neboli shift, se převádí přidáním nuly na začátek, případně na konec, sekvence bitů a odebráním jednoho bitu z druhé strany řetězce. Posun doprava (>>) tedy přidá nulu na začátek a odebere poslední bit, což pro binární čísla odpovídá celočíselnému dělení dvěma. Posun doleva (<<) naopak přidá nulu na konec řetězce a odebere první bit, což pro binární čísla odpovídá násobení dvěma.

Příklady posunů

Posun doprava (>>) o 1 pozici celočíselně dělí dvěma. Posun o 2 pozice dělí čtyřmi, posun o 3 dělí osmi a tak dále.

  • Z čísla 10 udělá číslo 5: 1010 >> 1 = 0101
  • Z čísla 4 udělá číslo 2: 0100 >> 1 = 0010
  • Z čísla 7 udělá číslo 3: 0111 >> 1 = 0011
  • Posun o 2 udělá z čísla 10 číslo 2: 1010 >> 2 = 0010
  • Posun o 2 udělá z čísla 7 číslo 1: 0111 >> 2 = 0001
  • Posun o 3 udělá z čísla 10 číslo 1: 1010 >> 3 = 0001

Posun doleva (<<) o 1 pozici celočíselně násobí dvěma. Posun o 2 pozice násobí čtyřmi, posun o 3 násobí osmi a tak dále.

  • Z čísla 5 udělá číslo 10: 0101 << 1 = 1010
  • Z čísla 4 udělá číslo 8: 0100 << 1 = 1000
  • Z čísla 7 udělá číslo 14: 0111 << 1 = 1110
  • Posun o 2 udělá z čísla 1 číslo 4: 0001 << 2 = 0100
  • Posun o 2 udělá z čísla 3 číslo 12: 0011 << 2 = 1100
  • Posun o 3 udělá z čísla 1 číslo 8: 0001 << 3 = 1000

Využití

Díky izolovanosti provádění operace na každém bitu zvlášť je v počítači často možné provádět více bitových operací paralelně. Následkem toho je práce s bitovými operacemi velmi rychlá, rychlejší než například sčítání nebo odčítání.

Bitové operace je možné používat na libovolné binární řetězce, nejen na čísla. Například do osmi bitů se dá místo osmibitového čísla uložit 8 indikátorů, takzvaných flagů, nesoucích binární informaci (s hodnotami true nebo false). S těmito flagy je pak možné manipulovat zároveň pomocí binárních operací.

Nahoru

Hexadecimální čísla jsou čísla zapsaná v šestnáctkové (hexadecimální) soustavě. Tato soustava využívá 16 symbolů (0–9 a A–F, kde A–F představují desítku až patnáctku).

Hexadecimální čísla jsou úzce propojena s binární soustavou. Každý symbol v šestnáctkové soustavě představuje čtyři bity v binární soustavě, což usnadňuje převody mezi těmito soustavami. Každé číslo v hexadecimální soustavě lze převést na binární tím, že každému hexadecimálnímu symbolu přiřadíme čtyři bity.

Příklady převodu čísel

  • Hexadecimální číslo 1A odpovídá binárnímu číslu 00011010, protože 1 = 0001 a A = 10 = 1010. V desítkové soustavě odpovídá 1A číslu 26 (1 \cdot 16 + 10).
  • Desítkové číslo 255 může být vyjádřeno hexadecimálně jako FF, kde F značí patnáctku.

Hexadecimální čísla jsou často využívána v oblasti barevného zobrazení, například v RGB modelu. Každá složka barvy (červená, zelená, modrá) je vyjádřena osmi bity, což odpovídá dvěma hexadecimálním číslicím. Například barva červená s plnou intenzitou by byla zapsána jako #FF0000, kde FF reprezentuje maximální hodnotu červené složky.

Nahoru
NAPIŠTE NÁM

Děkujeme za vaši zprávu, byla úspěšně odeslána.

Napište nám

Nevíte si rady?

Před položením dotazu si prosím projděte návody:

Prosíme, nezasílejte dotazy na prozrazení řešení úloh či vysvětlení postupu. Pokud hlásíte chybu, upřesněte prosím, v čem přesně spočívá a připojte snímek obrazovky.

Čeho se zpráva týká?

Vzkaz Hlášení chyby Obsah Ovládání Přihlášení Licence