Co jsou to bity a bajty
Tento článek je třetím dílem několikadílné série pro začínající programátory o tom, jak počítače pracují s daty.
- V prvním díle jste se dozvěděli, že všechny možné druhy dat jsou vždy jen hromady malých čísel.
- Ve druhém díle jsme si vyprávěli příběh o číselných soustavách, díky kterému už tušíte, že počítače pracují v jiné soustavě než my lidé.
Máme tak všechno krásně přichystáno, abychom se konečně dostali k jádru pudla a rozkryli, co se skrývá za často omýlaným tvrzením, že počítače pracují s nulami a jedničkami.
Skladování a přenos dat
Abyste mohli na svůj Instagram poslat už sedmnáctou dokonale vystylovanou fotečku ze své digitálně nomádské cesty po Kambodži, musíte nejdřív takovou fotku jednak někam uložit, jednak ji nějakou datovou cestou poslat domů. Takhle to nakonec funguje se všemi daty, které na počítačích zpracováváme. Vždy je chceme umět někam uložit a někam přenést.
Na ukládání dat používáme spousty různých technologii, většinu z nich jste jistě už někde potkali, o některých vám možná povypráví vaši prarodiče:
- operační paměť (RAM) uvnitř počítače, která je velmi rychlá, ale data v ní jsou uložena jen do restartu počítače nebo mobilního telefonu,
- pevný disk (harddisk), který je pomalejší, ale data na něm zůstávají i po vypnutí počítače,
- flash paměti vhodné pro fyzické přenášení dat mezi zařízeními,
- optická média jako CD, DVD nebo Blu-ray disky,
- diskety (zeptejte se rodičů), magnetické pásky nebo dokonce děrné štítky (téma na hovory s babičkou a dědou).
Pokud chceme naopak data efektivně přenášet z místa na místo, používáme
- elektrické vodiče uvnitř počítače pro přenos dat mezi jednotlivými komponentami jako procesor, pamět, grafická karta nebo disk,
- bezdrátové technologie jako Wi-Fi, Bluetooth nebo mobilní sítě (GSM, 5G),
- optické kabely pro rychlé přenosy dat v rámci počítačových sítí,
- satelitní spoje pro přenos dat mezi kontinenty (například Starlink od SpaceX),
Teď to skoro vypadá, že vás ze všech těchto technologií čeká nějaká drsná zkouška. Nebojte! Tento výčet uvádíme jen pro představu, jak různorodé všemožné technologie můžou být. Pokud chceme najít dobrý způsob pro kódování dat jak pro ukládání tak pro přenus, musíme vymyslet něco opravdu univerzálního a hlavně jednoduchého.
Jedničky a nuly
Teď konečně přichází myšlenka za všechny prachy. Jak už jsme viděli, pro reprezentaci jakýchkoliv dat nám stačí umět zakódovat tato data jako malá čísla. Navíc z našeho lehce ujetého příběhu o číselných soustavých víme, že čísla můžeme zapisovat pomocí deseti cifer, ale taky klidně třeba dvanácti jako Moraváci nebo osmi jako Simpsonovi.
S odvážným nápadem však už v roce 1689 přišel Německý matematik Gottfried Wilhelm Leibniz. Ten samozřejmě v samých počátcích osvícenství neměl o počítačích ani páru. I tak jej ale napadlo, že by mohlo být výhodné používat pro reprezentaci čísel pouze dvě cifry. Tedy cifry 0 a 1.
Tím vznikla takzvaná binární soustava nebo také dvojková soustava. Funguje na stejných principech jako už známe z desítkové nebo osmičkové soustavy, jen budeme mít cifer zatraceně málo.
- V desítkové soustavě máme cifry 0 až 9. Po čísle 9 (devět) nám všechny dojdou a musíme začít skládat dvouciferná čísla 10 (deset), 11 (jedenáct), 12 (dvanáct), atd.
- V osmičkové soustavě máme pouze cifry 0 až 7 a dvouciferná čísla musíme začít skládat už pro 10 (osm), 11 (devět), 12 (deset), atd.
Ve dvojkové soustavě však máme v nabídce pouze cifry 0 a 1. Dojdou tedy hodně rychle. Už číslo „dva“ musíme zapsat jako 10 a číslo „tři“ jako 11. Tím jsme dost rychle vyčerpali všechna dvojciferná čísla a musíme už začít skládat trojciferná. Tabulka prvních několika čísel v binární soustavě tak vypadá takto:
Desítkově | Binárně |
---|---|
0 | 0 |
1 | 1 |
2 | 10 |
3 | 11 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
8 | 1000 |
9 | 1001 |
10 | 1010 |
11 | 1011 |
12 | 1100 |
13 | 1101 |
14 | 1110 |
15 | 1111 |
16 | 10000 |
Bity a bajty
Všechna data jaká si umíme představit se tedy nakonec uloží nebo přenesou jako nějaký surový blok nul a jedniček, například takovýto:
0100101001100101011011000110010101101110011011110111011001101001001000000111000001101001011101100110111100100000011011100110010101101100011001010110101000100001
Jednotlivým cifrám v takovém bloku říkáme bity. Slovo bit pochází z anglického binary digit, tedy dvojková číslice. Bit je nejmenší jednotkou informace, kterou počítač dokáže zpracovat. Výše uvedený blok obsahuje přesně 160 bitů.
V našem ukázkovém bloku bitů je zakódována posloupnost nějakých čísel. Jak ale poznáme, kde jedno číslo končí a druhé začíná? Abychom si vždy byli jistí, dohodneme se, že budeme každý blok dat vizuálně dělit na menší části po osmi bitech.
01001010 01100101 01101100 01100101 01101110 01101111 01110110 01101001 00100000 01110000 01101001 01110110 01101111 00100000 01101110 01100101 01101100 01100101 01101010 00100001
Jednomu takovému osmibitovému bloku pak budeme říkat česky bajt, anglicky byte. Slovo byte vychází z anglického by eight. Náš ukázkový blok tak obsahuje přesně 20 bajtů. Když je převedeme zpátky do desítkové soustavy, dostaneme následující posloupnost čísel:
74 101 108 101 110 111 118 105 32 112 105 118 111 32 110 101 108 101 106 33
Pokud si tyto čísla převedeme zpět do znaků získáme už známý text:
Největší binární číslo, které můžeme zapsat pomocí osmi bitů je 11111111, tedy desítkově 255. Do jednoho bajtu se nám tedy vždy vejde pouze jedno číslo v rozmezí 0 až 255. Konečně tak dostáváme odpověď na otázku, proč jsme už od samého začátku chtěli všechna data rozsekat na malá čísla v rozmezí 0 až 255.
Proč právě 8 bitů?
Kde jsme přišli na to, že osm bitů je ideální délka pro jeden bajt? K tomuto rozhodnutí došlo v polovině 70. let minulého století, kdy společnost IBM začala vyrábět počítač System/360, což byl první komerční počítač určený jak pro vědecké tak pro podnikové účely. Tehdy v IBM soupeřily dva návrhy na délku bajtů. Jeden návrh byl používat 6 bitů na bajt, druhý návrh byl pro 8 bitů. Nakonec z různých technických důvodů zvítězil návrh s osmi bity.
Na tomto příkladu je dobře vidět, že přestože informační technologie často považujeme za symbol moderní doby, většina principů, na kterých počítače stojí a fungují, jsou staré více než půl století nebo pocházejí dokonce ze 17. století.
Paměťové jednotky
Jak už jsme si řekli na začátku, data chceme jednak ukládat do paměti, jednak přenášet pomocí různých telekomunikačích prostředků. Abychom vyjádřili, kolik dat dokážeme někam uložit nebo poslat, používáme jednotky odvozené od bitů a bajtů.
Když data ukládáme do paměti, jako základní jednotkou používáme jeden bajt. Tuto jednotku značíme velkým písmenem B. Pro větší objemy dat pak používáme násobky jako kB (kilobajt), MB (megabajt) nebo GB (gigabajt). Teď je ovšem třeba se připravit na pořádně zákeřný podraz. Z běžného žívota jsem zvyklí, že kilometr je tisíc metrů a třeba megawatt je milion wattů. Z technických důvodů souvisejících s adresováním RAM pamětí, se však jeden kilobajt historicky počitá ne jako 1000 bajtů ale jako 1024 bajtů. Stejně tak jeden megabajt je 1024 kilobajtů a jeden gigabajt je 1024 megabajtů.
Když si tedy například slavnostně do svého počítače koupíte pamět RAM s kapacitou 8 GB, dostanete za své peníze přesně 8 589 934 592 bajtů.
Zmatení však, milé děti, nekončí. Když totiž data přenášíme po síti, používáme jednotky odvozené od bitů. Základní jednotkou je tedy jeden bit, který značíme malým písmenem b. Pro větší objemy dat pak používáme násobky jako kb (kilobit), Mb (megabit) nebo Gb (gigabit). Lidé od telekomunikací nemusí řešit žádné technologie kolem adresování pamětí, takže většinou počítají jeden kilobit standardně jako 1000 bitů, jeden megabit jako 1000 kilobitů a tak dále.
Například český operátor Vodafone v době psaní tohoto článku nabízí tři tarify pro domácí internet s rychlostmi 250 Mb/s, 500 Mb/s a 1 Gb/s. To znamená, že v nejpomalejším tarifu můžete přenést 250 000 000 bitů za sekundu. Když toto číslo vydělíme osmi, dostaneme 31 250 000 bajtů za sekundu, což je
- 31.25 MB/s pokud počítáme v násobcích 1000, nebo
- 29.8 MB/s pokud počítáme v násobcích 1024.
Teď bychom mohli být rozumní a pevně stanovit, že pro ukládání dat používáme násobky 1024 a pro přenos dat násobky 1000. Jenže to bychom žili ve světe, kdy jsou všechny bytůstky šťastny.
Vidíme, že pokud počítáme v násobcích 1024, objem dat vypadá menší. Tohoto si už dávno povšimnuli i proradní, krvelační a ziskuchtiví výrobci pevných disků. Když prodávají disk o velikosti přesně 1 000 000 000 bajtů, přepočteno podle násobků 1024 by takový disk měl kapacitu 0.93 TB. To se na krabici s novým diskem špatně marketingově vyjímá. Inu začali tedy také uvádět kapacitu disků v násobcích 1000, tedy jeden kilobajt počítají jako 1000 bajtů, nikoliv jako 1024.
Chcete se zbláznit?
Pokud se bavíme o přenosové rychlosti vašeho připojení k internetu, tak tu ovlivňuje asi tak milion různých faktorů. Takže pokud váš operátor avízuje rychlost 31.25 MB/s, a ve skutečnosti je to jen 29.8 MB/s, tak je to vlastně úplně jedno.
Pokud však jste někdo, kdo chce přesně vyjadřovat objemy dat například v technických nebo vědeckých textech, tak se z nejasností ohledně velikosti předpon kilo, mega a giga můžete tak akorát střelit do hlavy.
Mezinárodní standardizační komise IEC se proto v roce 1998 rozhodla udělat ve věcech pořádek. V podstatě řekla, že předpony kilo, mega a giga by se měly používat pro násobky 1000 jako ve všech ostatních oborech, kde jsou lidé ještě při smyslech. Pro násobky 1024 pak zavedli speciální veselé a hravé předpony kibi, mebi a gibi. Kibi (KiB) od spojení kilo binary, mebi (MiB) od mega binary atd. Smysluplné oznančení pro násobky 1024 tedy vypadá takto:
- 1 KiB = 1024 B
- 1 MiB = 1024 KiB
- 1 GiB = 1024 MiB
Správně by tedy výrobci RAM pamětí měli uvádět jejich kapacitu v jednotkách GiB místo GB. Většina z nich na to ale samozřejmě kašle. Zároveň operátoři by měli uvádět rychlosti připojení k internetu v jednotkách Mb/s a myslet tím 1 000 000 bitů za sekundu. Jestli to ale tak skutečně myslí ví jen Bůh nebo v lepším případě jejich marketingové oddělení.
Závěr
Po přečtení tohoto článku vám možná trochu vybuchuje hlava. Až vám trochu slehne, zjistíte, že už se docela dobře orientujete v tom, co to doopravdy znamená, že počítače pracují s nulami a jedničkami. Také už jste v podstatě experti na jednotky jako bity, bajty, kilobajty, mebibajty, gibibajty a podobné šílenosti.
V příštím článku si povíme více o tom, jak si nějaká skutečná data prohlédnout a proč k tomu proboha potřebujeme ještě další číselnou soustavu.