Řekněme, že máme 1 bajt. Už víte, že 1 bajt = 8 bitů a také, že 8 bitů je číslo v rozsahu 28 nebo od 0 do 255. Od nuly se počítá takto.
- 0 = 00000000
- 1 = 00000001
- 2 = 00000010
- 3 = 00000011
- …
- 42 = 00101010
- …
- 255 = 11111111
Ale co když potřebujete negativní čísla?
Musíte vymyslet jiný „kód“ jakým způsobem se převádí bity (signály v počítači) do celého čísla, které umí být jak kladné tak i záporné!
Znaménkový bit
Jedna možnost je vzít jeden bit zkraje a říct, že reprezentuje plusovou nebo mínusovou hodnotu.
Například:
- 42 = 10101010
- 1 = znaménko plus (+) symbolizující kladné číslo
- 0101010 = hodnota 42
No a záporné číslo -42 by vypadalo takto.
- -42 = 00101010
- 0 = znaménko minus (-) symbolizující záporné číslo
- 0101010 = hodnota 42
Záporná nula
Má to však problém: kladnou a zápornou nulu.
0 = 1|0000000 …. +0?
0 = 0|0000000 …. -0?
Co se má stát, když sečtete plusovou nulu a negativní nulu? Co když je vynásobíte? Co když vynásobíte kladné číslo zápornou nebo kladnou nulou? Tento způsob se nepoužívá* protože kladná nebo záporná nula nemá reálný základ. Nula je jenom jedna a nemá znaménko a z toho důvodu se znaménkový bit nepoužívá. 1
Dvojkový doplněk
Pokud máte 8 bitový rozsah, tak začátek vypadá úplně stejně, jako kdybyste počítali mezi dvěma číselnými soustavami.
0 = 00000000
1 = 00000001
2 = 00000010
3 = 00000011
…
42 = 00101010
Ale: jakmile vyplníte všechny bity kromě prvního na 1, uděláte následující.
- Přičtete k číslu +1
- Změníte znaménko na mínus
- Začnete počítat pozpátku
Tzn.
126 = 01111110
127 = 01111111
-128 = 10000000
-127 = 10000001
-126 = 10000010
-125 = 10000011
…
-1 = 11111111
V kapitole o desetinných číslech zjistíte, že to není zas tak úplně pravda. ↩︎