Počítače vykonávajú všetky matematické operácie v binárnej sústave — teda s číslami, ktoré sa skladajú iba z núl a jednotiek. Binárne sčítanie funguje rovnako ako desiatočné sčítanie, ktoré poznáš zo školy, len s jedným dôležitým rozdielom: prenos nastáva pri 2, nie pri 10.
Základné pravidlá binárneho sčítania
Na zapamätanie sú iba štyri pravidlá:
| Sčítanie | Výsledok | Poznámka |
|---|---|---|
| 0 + 0 | 0 | Jednoduché |
| 0 + 1 | 1 | Jednoduché |
| 1 + 0 | 1 | Jednoduché |
| 1 + 1 | 10 | Výsledok je 0, prenos 1 (carry) |
| 1 + 1 + 1 | 11 | Výsledok je 1, prenos 1 (carry) |
V binárnej sústave sa „prenos" nazýva carry. Keď sčítaš 1 + 1, výsledok v danom stĺpci je 0 a prenesieš 1 do ďalšieho stĺpca naľavo — presne tak ako pri sčítaní 9 + 1 = 10 v desiatkovej sústave.
Príklad 1: Jednoduché sčítanie
Sčítaj binárne čísla 0110 a 0011.
0110 (= 6 v desiatkovej sústave)
+ 0011 (= 3 v desiatkovej sústave)
------
1001 (= 9 v desiatkovej sústave)
Postup stĺpec po stĺpci sprava doľava:
- 0 + 1 = 1
- 1 + 1 = 10 → napíš 0, prenos 1
- 1 + 0 + 1 (prenos) = 10 → napíš 0, prenos 1
- 0 + 0 + 1 (prenos) = 1
Výsledok: 1001 = 9. Správne!
Príklad 2: Sčítanie s viacerými prenosmi
Sčítaj 1011 a 0110.
1011 (= 11)
+ 0110 (= 6)
------
10001 (= 17)
Krok po kroku:
- 1 + 0 = 1
- 1 + 1 = 10 → napíš 0, prenos 1
- 0 + 1 + 1 (prenos) = 10 → napíš 0, prenos 1
- 1 + 0 + 1 (prenos) = 10 → napíš 0, prenos 1
- Zostatok prenosu: 1
Výsledok: 10001 = 16 + 1 = 17. Správne!
Vždy si skontroluj výsledok prevedením oboch čísel do desiatkovej sústavy a ich sčítaním. Ak sa výsledky zhodujú, urobil si to správne.
Pretečenie (Overflow)
Čo sa stane, keď výsledok potrebuje viac bitov, ako má vyhradený priestor? Tento jav sa volá pretečenie (overflow).
Napríklad, ak pracujeme iba so 4-bitovými číslami:
- Maximum je
1111= 15 1111 + 0001=10000= 16, ale to je 5-bitové číslo!
V reálnom počítači sa piaty bit zahodí a výsledok bude 0000, čo je nesprávne. Pretečenie môže spôsobiť vážne chyby v programoch.
# Ukážka binárneho sčítania v Pythone
a = 0b1011 # 11 v desiatkovej
b = 0b0110 # 6 v desiatkovej
sucet = a + b
print(f"{a} + {b} = {sucet}") # 11 + 6 = 17
print(f"V binárnej sústave: {bin(sucet)}") # 0b10001
Pretečenie (overflow) je skutočný problém v programovaní. Chybný výpočet spôsobený pretečením bol príčinou havárie rakety Ariane 5 v roku 1996 — program uložil 64-bitové číslo do 16-bitového priestoru.
Cvičné príklady
Vypočítaj binárne sčítanie: 1010 + 0101. Aký je výsledok v binárnej aj desiatkovej sústave?
Zobraziť odpoveď
Sčítaj binárne čísla 1101 a 0111. Aký je výsledok?