Pro reprezentaci veškerých dat v počítači se používá dvojková (binární) soustava.
Na rozdíl od desítkové soustavy, ve které počítají lidé a která má 10 symbolů (číslic), totiž 0, 1, 2, 3, 4, 5, 6, 7, 8 a 9, se ve dvojkové soustavě používají pouze dva symboly (dvě číslice), a to 0 a 1.
Reprezentace kladných (celých) čísel ve dvojkové soustavě je jednoduchá. Stačí znát přirozené mocniny čísla 2.
Vezměme například číslo 50 v desítkové soustavě. Jeho vyjádření ve dvojkové soustavě je 11010:
Pozn.:
Bity se počítají zprava doleva, první bit má index 0, pořadí bitu je zároveň exponent v mocnině dvojky.
Bit # | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Mocnina 2 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 |
Hodnota mocniny | 256 | 128 | 64 | 32 | 16 | 4 | 2 | 1 |
Dvojkové vyjádření čísla | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 |
Použité mocniny 2 | 32 | 16 | 2 | |||||
Číslo v desítkové soustavě | 32 + 16 + 2 = 50 |
Pro reprezentaci záporných (celých) čísel máme několik možností. Ukážeme si dvě nejběžnější.
Nejpřirozenější způsob přechodu k záporným číslům je ten, že řekneme, že nejvyšší bit (u 8-bitových čísel tedy 7. bit) znamená znaménko.
Je-li v nejvyšším bitu 0, jde o kladné číslo, je-li v něm 1, je to záporné číslo.
Použijeme-li předešlý příklad, pak:
(00011010)2 znamená číslo +50.
(10011010)2 je -50.
Přímý kód pro ukládání záporných čísel má několik nevýhod. Jednou z nich je, že pro číslo 0 máme dvě reprezentace: "+0" a "-0"
(00000000)2 je "kladná" nula (běžně chápané číslo 0).
(10000000)2 je "záporná" nula (je to pořád nula, ale má ve znaménkovém bitu jedničku).
Doplňkový kód se hůře "přepočítává" (jak udělat např. z čísla +6 číslo -6), ale má řadu výhod, které vedou k tomu, že jeho využívání je častější. I v doplňkovém kódu se nejvyšší bit považuje za znaménkový, tj. je-li v nejvyšším bitu nula, jedná se o kladné číslo, je-li v něm jednička, máme co do činění se záporným číslem, ale jeho hodnotu nezjistíme jednoduše tak, že si odmyslíme znaménkový bit, zjistíme hodnotu příslušného kladného čísla a přidáme znaménko minus.
Postup převedení kladného čísla na záporné číslo (k němu opačné):
Pozn.: Tento postup funguje i naopak, tj. když převádíme záporné číslo na jeho příslušné (opačné) číslo kladné.
Ukažme si tedy doplňkový kód na příkladu s číslem 6:
Bit # | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Hodnota mocniny 2 | 256 | 128 | 64 | 32 | 16 | 4 | 2 | 1 |
Dvojkové vyjádření čísla | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
Číslo v desítkové soustavě | 4 + 2 = 6 |
Nyní provedeme výše popsaný postup, kterým dostaneme dvojkové vyjádření čísla -6.
Krok 1: Původní číslo | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Krok 2: Invertované číslo | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
Krok 3: Po přičtení jedničky | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 |
Krok 4: Číslo v desítkové soustavě | -6 |
Doplňkový kód má pouze jedinou nulu.
Další výhodou je "odčítání":
(00000010)2 = (+2)10
Odečteme 1.
(00000001)2 = (+1)10
Odečteme 1.
(00000000)2 = (0)10
Odečteme 1.
(11111111)2 = (-1)10
Odečteme 1.
(11111110)2 = (-2)10
A tak dále.