byte se čte „bajt“Takéoctet, binary digit, b, BZákladní
Definice
Bit a byte znamená dvojici základních jednotek digitálních dat: bit vyjadřuje jednu binární hodnotu 0 nebo 1, zatímco byte je skupina osmi bitů používaná jako praktická jednotka paměti a souborů. Rozdíl je důležitý při počítání kapacity, síťové rychlosti, kódování textu i práci s nízkoúrovňovými daty.
Proč se počítače opírají o bity
Bit je nejmenší běžně používaná jednotka informace v digitálním systému. Hodnota bitu má dva stavy, obvykle zapisované jako 0 a 1. Elektronika je umí reprezentovat napětím, magnetickým stavem, nábojem v paměti nebo logickou hodnotou v programu.
Samotný bit málokdy stačí pro užitečná data. Jeden bit může vyjádřit například ano/ne, zapnuto/vypnuto nebo pravda/nepravda. Více bitů dohromady už tvoří čísla, znaky, barvy pixelů, instrukce pro CPU nebo příznaky v síťovém protokolu.
Proč se z osmi bitů stal byte
Byte je v současných počítačích skupina osmi bitů. Osmibitový byte umí uložit 256 různých kombinací, protože každá z osmi pozic zdvojnásobuje počet možností. Kombinace 00000000 až 11111111 proto odpovídají hodnotám 0 až 255, pokud je čteme jako celé číslo bez znaménka.
Historicky nemusel mít byte vždy stejnou velikost, proto se v některých technických textech používá slovo octet pro přesně osm bitů. V běžném softwarovém vývoji, operačních systémech, souborech a webových technologiích ale byte prakticky znamená osm bitů.
Kde vzniká zmatek mezi velikostí a rychlostí
Velikost souborů a paměti se obvykle uvádí v bytech: kB, MB, GB nebo také KiB, MiB a GiB. Síťová rychlost se často uvádí v bitech za sekundu: Mb/s nebo Gb/s. Rozdíl mezi malým b a velkým B je zásadní, protože 1 B je 8 b.
Připojení 100 Mb/s tedy v ideálních podmínkách nepřenese 100 MB za sekundu, ale nejvýše přibližně 12,5 MB za sekundu před započtením režie protokolů. Přenos přes TCP nebo adresování přes IP adresu přidává hlavičky a řízení spojení, takže reálná hodnota bývá nižší.
Bitové operace a práce s byty v programech
Programátoři se s bity setkávají při maskách oprávnění, kompresi, kryptografii, práci s binárními soubory nebo parsování protokolů. Operace AND, OR, XOR a bitový posun dovolují měnit konkrétní pozice v čísle bez převodu na text.
Byte je zase přirozená jednotka pro pole binárních dat. Obrázek, ZIP archiv nebo síťový paket program často nečte jako znaky, ale jako sekvenci bytů. Teprve kódování, například UTF-8, říká, jak se některé byty mají interpretovat jako text.
Dva praktické důsledky pro vývojáře
Text nemusí mít stejný počet znaků a bytů
Řetězec s diakritikou může mít jinou délku v uživatelsky viditelných znacích a jinou délku po uložení do UTF-8. Kontrola limitu databázového sloupce, velikosti HTTP požadavku nebo zprávy do fronty proto musí rozlišovat znaky a byty.
Binární data nejsou bezpečný text
Libovolné byty nelze bez pravidel vložit do textového formátu a čekat, že přežijí beze změny. Pro přenos binárních dat v JSON se často používá Base64, která zvětší objem, ale převede data na bezpečné znaky.
Příklady z praxe
Limit zprávy v UTF-8
Vývojář ukládá český text do rozhraní, které má limit v bytech, ne ve znacích. Slovo s diakritikou může po zakódování do UTF-8 zabrat více bytů než podobně dlouhé ASCII slovo. Kontrola podle počtu znaků by proto mohla projít, ale server by zprávu odmítl kvůli velikosti.
s = "žluťoučký" print(len(s)) # počet znaků v Python řetězci print(len(s.encode("utf-8"))) # počet bytů po uložení do UTF-8Rychlost internetu versus velikost souboru
Uživatel stahuje soubor o velikosti 100 MB přes linku s rychlostí 50 Mb/s. Ideální výpočet vyjde na 16 sekund, protože megabyte je osmkrát větší než megabit. Skutečné stahování bývá pomalejší kvůli režii protokolů, latenci a kolísání linky.
soubor_MB = 100 link_Mb_s = 50 idealni_cas_s = soubor_MB * 8 / link_Mb_s print(idealni_cas_s) # 16.0
Časté omyly
- MýtusMegabit a megabyte jsou skoro totéž, jen jiný zápis.
- Ve skutečnostiMegabit a megabyte se liší osmkrát. Zkratka Mb označuje megabity, zatímco MB označuje megabyty, pokud autor dodržuje běžnou technickou notaci.
- MýtusJeden znak v textu vždycky zabere jeden byte.
- Ve skutečnostiJeden znak zabere jeden byte jen v některých jednoduchých kódováních a jen pro omezenou sadu znaků. V UTF-8 může jeden znak zabrat více bytů, zvlášť u diakritiky, symbolů a emoji.
- MýtusKdyž má internet 100 Mb/s, stahuji rychlostí 100 MB/s.
- Ve skutečnostiLinka 100 Mb/s má teoretické maximum asi 12,5 MB/s před započtením režie. Reálná rychlost stahování závisí také na protokolu, serveru, Wi-Fi, latenci a vytížení sítě.
Časté dotazy
- Je byte vždycky osm bitů?
- Byte v dnešních běžných počítačích, programovacích jazycích a souborových formátech znamená osm bitů. Historicky existovaly architektury, kde velikost bytu nebyla jednotná, takže některé standardy používají slovo octet, když chtějí výslovně říct osm bitů. Pro web, databáze, operační systémy a většinu aplikačního vývoje je bezpečné počítat s tím, že jeden byte má osm bitů.
- Proč se rychlost internetu uvádí v bitech, ale soubory v bytech?
- Rychlost internetu se tradičně uvádí v bitech za sekundu, protože telekomunikace měří tok jednotlivých bitů linkou. Velikost souborů se naopak obvykle uvádí v bytech, protože soubory, paměť a disková úložiště pracují s byty jako základní adresovatelnou jednotkou. Převod je jednoduchý: hodnotu v bytech vynásobíte osmi, hodnotu v bitech vydělíte osmi.
- Co znamená rozdíl mezi MB a Mb?
- Zápis MB obvykle znamená megabyte, zatímco Mb znamená megabit. Rozdíl velkého a malého písmena mění hodnotu osmkrát. Připojení 80 Mb/s má teoretické maximum 10 MB/s, pokud nepočítáme režii a ztráty. Nejasné zápisy v marketingu, fakturách nebo uživatelském rozhraní mohou vést k mylnému očekávání rychlosti.
- Proč jeden znak někdy zabere víc než jeden byte?
- Textový znak není totéž co byte, protože počet bytů závisí na zvoleném kódování. V ASCII má jeden znak jeden byte, ale v UTF-8 mohou česká písmena, emoji nebo některé symboly zabrat více bytů. Databázové limity, HTTP hlavičky a binární protokoly proto často řeší velikost v bytech, i když uživatel vnímá text jako znaky.
Zdroje
- Built-in Types(otevře se v novém okně)
- The Unicode Standard(otevře se v novém okně)
- Bit(otevře se v novém okně)
- Byte(otevře se v novém okně)