Podcast na Sčítání a odčítání ve dvojkové soustavě

Sčítání a odčítání ve dvojkové soustavě: Kompletní průvodce

Podcast

Binární soustava a aritmetika0:00 / 10:13
0:001:00 zbývá
MartinKdyž jsi dneska ráno otevřel Instagram, každá fotka, každé video, které jsi viděl... v jádru to všechno byly jen obrovské řetězce jedniček a nul. Právě na tenhle tajný jazyk počítačů se dnes podíváme.
BarboraPřesně tak. Všechny tyhle jedničky a nuly tvoří takzvanou dvojkovou neboli binární soustavu. A důvod, proč ji počítače milují, je vlastně hrozně jednoduchý: elektrické obvody znají jen dva stavy. Buď je tam napětí, nebo není. Zapnuto, nebo vypnuto. Jednička, nebo nula.
Kapitoly

Binární soustava a aritmetika

Délka: 10 minut

Kapitoly

Úvod do světa nul a jedniček

Jak sčítat binárně

Příklad z praxe

Pozor na přetečení

Přetečení se znaménkem

Proč odčítat sčítáním?

Jedničkový a dvojkový doplněk

Běžné chyby a shrnutí

Délka bitů a simulace

Co ukáže simulace?

Shrnutí a rozloučení

Přepis

Martin: Když jsi dneska ráno otevřel Instagram, každá fotka, každé video, které jsi viděl... v jádru to všechno byly jen obrovské řetězce jedniček a nul. Právě na tenhle tajný jazyk počítačů se dnes podíváme.

Barbora: Přesně tak. Všechny tyhle jedničky a nuly tvoří takzvanou dvojkovou neboli binární soustavu. A důvod, proč ji počítače milují, je vlastně hrozně jednoduchý: elektrické obvody znají jen dva stavy. Buď je tam napětí, nebo není. Zapnuto, nebo vypnuto. Jednička, nebo nula.

Martin: To dává smysl. Posloucháte Studyfi Podcast.

Barbora: A i když to zní složitě, pochopení, jak počítače sčítají a odčítají jen s těmito dvěma číslicemi, je základní kámen celé informatiky.

Martin: Dobře, takže počítač má jen nuly a jedničky. Ale jak s nimi, proboha, počítá? Jak sečte dvě čísla?

Barbora: Je to překvapivě podobné tomu, jak sčítáme my v desítkové soustavě, jen mnohem jednodušší. Jsou jen čtyři základní pravidla. Nula plus nula je nula. Nula plus jedna je jedna.

Martin: To zatím zvládám.

Barbora: Vidíš! Jedna plus nula je taky jedna. A teď to nejtěžší... jedna plus jedna je... dvě. Ale dvojku v binární soustavě nemáme. Takže výsledek je 'jedna nula', tedy 10. Ta nula se zapíše a jednička se 'přenese' do dalšího sloupce, přesně jako když v desítkové sečteš pět plus pět.

Martin: Aha, takže přenos. Jako na základní škole. A co když mám přenos a sčítám k tomu ještě jedničky? Třeba jedna plus jedna plus ten přenos?

Barbora: Skvělá otázka! Pak je to jedna plus jedna plus jedna, což je tři. A v binární soustavě se to zapíše jako 'jedna jedna', tedy 11. Opět, jedna se zapíše a druhá se přenese.

Martin: Dobře, teorii máme. Můžeme si to ukázat na nějakém delším příkladu?

Barbora: Jasně. Vezměme si dvě 8bitová čísla. Třeba 01010110, což je 86, a 00111001, což je 57. Sčítáme je pod sebou, zprava doleva, sloupec po sloupci.

Martin: Tak jdeme na to. Poslední sloupec: nula plus jedna je jedna.

Barbora: Správně. Druhý odzadu: jedna plus nula je taky jedna. Třetí taky. Až v pátém sloupci narazíme na jedna plus jedna. Takže co napíšeme?

Martin: Napíšeme nulu a jedničku si přeneseme dál.

Barbora: Perfektní! A takhle pokračujeme až na konec. Když sečteme i všechny přenosy, vyjde nám 10001111. A když to převedeme zpátky, dostaneme 143. Což je přesně 86 plus 57. Sedí to!

Martin: Páni, takže to fakt funguje. Ale co když je výsledek moc velký?

Barbora: To je přesně ten problém, kterému se říká přetečení neboli overflow. Představ si, že máš 8 bitů. Do nich se vejdou čísla od 0 do 255.

Martin: Jako sklenice, která má objem přesně 255 mililitrů.

Barbora: Přesně tak! A teď se pokus sečíst 200 a 64. Výsledek je 264. Co se stane, když to zkusíš nalít do té naší sklenice?

Martin: No... přeteče to. Všechno, co je nad 255, vyteče ven.

Barbora: A přesně to udělá počítač. Výsledek 264 potřebuje 9 bitů. Ale my máme jen 8. Takže ten devátý bit se prostě zahodí, zmizí. A počítač ti ukáže úplně nesmyslné číslo, v tomto případě 8. Tohle je jedna z nejzáludnějších chyb v programování.

Martin: Minule jsme probrali přetečení u čísel bez znaménka. Ale co čísla se znaménkem? Předpokládám, že tam je to trochu složitější.

Barbora: Přesně tak, Martine. U čísel se znaménkem, typicky v dvojkovém doplňku, je detekce přetečení jiná. Představ si, že sčítáš dvě kladná čísla a najednou ti vyjde záporné.

Martin: Počkat, jak to? To zní jako špatný vtip.

Barbora: Je to tak. Nebo když sečteš dvě záporná čísla a výsledek je kladný. To je jasný signál, že došlo k přetečení.

Martin: A čím je to způsobeno technicky?

Barbora: Stane se to, když se přenos *do* nejvyššího, tedy znaménkového bitu, liší od přenosu, který jde *z* něj ven. Zkrátka, výsledek se už nevejde do daného počtu bitů.

Martin: Dobře, to dává smysl. Ale co odčítání? Proč se počítače vůbec obtěžují s nějakými doplňky? Neumí prostě odčítat přímo?

Barbora: Skvělá otázka. Uměly by to, ale je to pro digitální obvody mnohem složitější než sčítání. Je efektivnější mít obvody, které umí jen sčítat, a odčítání na sčítání převést.

Martin: Takže je to vlastně takový hardwarový life hack.

Barbora: Přesně! A k tomu právě slouží jedničkový a dvojkový doplněk.

Martin: Tak pojďme na ně. Začněme tím jedničkovým.

Barbora: Jednoduše. Jedničkový doplněk získáš tak, že invertuješ všechny bity. Z jedniček uděláš nuly a z nul jedničky. To je všechno.

Martin: A jak s tím odečtu třeba 57 od 86?

Barbora: Takže, chceme spočítat 86 mínus 57. Najdeš jedničkový doplněk čísla 57, přičteš ho k 86 a... tady je ta zvláštnost. Pokud ti vznikne přenos z nejvyššího řádu, musíš ho vzít a přičíst úplně na konec k výsledku.

Martin: Počkat, takže ten bit, co přeteče, se jen tak nezahodí, ale vrátí se zpátky do hry z druhé strany? Jako nějaký bumerang?

Barbora: Přesně tak! Říká se tomu „end-around carry“. Je to specifické jen pro jedničkový doplněk. Ale v praxi se skoro nepoužívá, protože má své mouchy, třeba dvě reprezentace nuly.

Martin: Aha. Takže jaký je ten lepší způsob? Dvojkový doplněk?

Barbora: Ano. Ten je dnes standard. Postup je podobný: invertuješ všechny bity a pak k výsledku přičteš jedničku. Tím získáš dvojkový doplněk.

Martin: A co s tím přenosem na konci? S tím bumerangem?

Barbora: A tady je ta krása... u dvojkového doplňku ho prostě ignoruješ. Zahodíš ho. Výsledek je mnohem čistší a jednodušší.

Martin: Takže abychom to shrnuli. Jaké jsou nejčastější chyby, které studenti dělají?

Barbora: Nejčastěji si pletou právě ty dva doplňky. Hlavně co dělat s tím přenosem na konci – u jedničkového přičíst, u dvojkového zahodit.

Martin: Rozumím. A pak asi to samotné sčítání, že? Třeba jedna plus jedna plus jedna je jedenáct, ne tři.

Barbora: Přesně! Ten přenos do vyššího řádu se nesmí zapomínat. A samozřejmě to přetečení, o kterém jsme mluvili na začátku. Není to jen „moc velké číslo“, ale situace, kdy znaménko výsledku nedává smysl.

Martin: Klíčový poznatek tedy je, že dvojkový doplněk vládne všem, protože je efektivnější a nemá problémy s dvojitou nulou. Díky moc, Barboro! To bylo super vysvětlení.

Barbora: Rádo se stalo, Martine.

Martin: No a když teď umíme sčítat a odčítat... co teprve násobení a dělení? To už zní jako pořádná výzva. Podíváme se na to příště?

Martin: Dobře, takže jsme si ukázali, jak na to s dvojkovým doplňkem. Ale co když čísla nemají stejný počet bitů? To se pak asi celé sesype, ne?

Barbora: To je skvělý postřeh! Nesesype, ale musíš být opatrný. Je kritické udržovat stejnou délku. U záporných čísel prostě zkopíruješ znaménkový bit doleva.

Martin: Aha, takže to je ten trik. Teorie je jedna věc, ale neexistuje způsob, jak si to všechno prakticky osahat? Nějaká simulace?

Barbora: Samozřejmě! Existují interaktivní simulace pro sčítání 8bitových čísel. Tam si to můžeš krásně vyzkoušet.

Martin: Super! A co přesně v takové simulaci uvidím?

Barbora: Uvidíš třeba vizualizaci přenosu. Přesně ten moment, kdy 1 plus 1 dá 10. A taky detekci přetečení, když se ti výsledek prostě nevejde do osmi bitů.

Martin: To je skvělé. Takže hned vidím, kde je problém. A můžu si to porovnat s desítkovou soustavou, abych věděl, že nepočítám nesmysly.

Barbora: Přesně tak. A i když simulace pracuje s 8 bity, principy jsou stejné pro 32 nebo 64 bitů v reálných počítačích. Chápeš tak, jak funguje procesor.

Martin: Fantastické. Takže, abychom to shrnuli. Prošli jsme si dnes základy binární soustavy, sčítání, odčítání pomocí doplňků a teď i praktické simulace. To byl teda nářez.

Barbora: Byl, ale je to naprostý základ pro kohokoli, kdo se zajímá o informatiku. Bez toho se nehneš dál.

Martin: S tím naprosto souhlasím. Barboro, moc ti děkuji, že jsi nám to tak skvěle vysvětlila. Bylo to super.

Barbora: Já děkuji za pozvání, Martine. Ráda jsem přišla.

Martin: Našim posluchačům děkujeme za pozornost a těšíme se na vás u dalšího dílu Studyfi Podcastu. Mějte se hezky!