Archiv pro štítek: binární soustava

Převod desetinného čísla do binární reprezentace

Tento text volně navazuje na článek popisující transformaci celého čísla do dvojkové soustavy. V několika ohledech na něj dokonce i odkazuje, proto doporučuji si nejprve prostudovat v něm popsané postupy. Následně můžete směle přikročit k převodu čísla s desetinnou čárkou.

Na úvod bude vhodné říci, že binární číslo pro aritmetické účely není jedinou možnou podobou údaje. Další formy symbolizují počítače a jejich způsoby ukládání binárních dat pro své vlastní účely.

Nejprve začnu převodem čísla v desítkové soustavě pro další matematické využití. Konkrétně půjde o 10,62510. Oddělím přitom od sebe celou a desetinnou část. Nyní se budu věnovat pouze 0,62510. Převod čísla 10 popisuje již zmíněný předcházející článek.

  • Mohu od 0,625 odečíst 1/2 bez toho, aby se dostal do záporných hodnot? ANO, učiním tak.
  • Mohu od 0,125 odečíst 1/4 bez toho, aby se dostal do záporných hodnot? NE
  • Vezměme opět 0,125. Mohu odečíst 1/8 bez toho, abych se dostal do záporných hodnot? ANO, učiním tak.
  • Zbývá nula, a proto převod končí. Pokud by se tak nestalo, pokračovali bychom dále s 1/16, 1/32, 1/64

Nyní nahradíme všechny odpovědi ANO jedničkou a tvrzení NE nulou. Výsledek zapisujeme směrem do horního údaje dolů. Získáváme tedy 1012. Přidáme-li 1010 v binární soustavě jako 10102, máme výsledek v podobě 1010,1012.

Nyní přichází na řadu reprezentace pro hardware počítače. Lze se vydat celkem dvěma cestami – pevnou nebo plovoucí desetinnou čárkou.

Pevná čárka

Nejprve si zvolíme počet míst za celou částí čísla, jenž budeme uchovávat. V našem případě půjde o 3. Dále musíme znát základ soustavy, do které převádíme, tedy 2. Provedeme jednoduchý výpočet 23 a tímto mezivýsledkem vynásobíme vstupní číslo, -10,62510 (povšimněte si přidaného znamínka mínus, jenž nám zajistí zajímavější postup). Pochopitelně -10,625 x 8 = -85. Z tohoto dalšího mezivýsledku oddělíme celou část (tedy -85) a tu následně převedeme do binární podoby. Využít můžeme například doplňkový kód – 101010112.

Plovoucí čárka

Transformace do podoby s proměnlivou řadovou čárkou se řadí mezi složitější operace. Podrobněji se ji například věnuje tento tutoriál. Výsledná hodnota se skládá celkem ze tří částí:

  • 1 bit pro znaménko (0 pro kladné číslo, 1 symbolizuje záporný údaj)
  • 8 bitů pro exponent
  • mantissa (normovaný tvar) – 23 bitů

Využijeme 1010,1012 z prvního příkladu a provede úpravu na tvar s exponentem, jenž zajistí existenci jediné číslice před desetinou čárkou -> 1,010101 x 23. Nyní zformujeme druhou část, k exponentu 3 přičteme 127 a provedeme převod do dvojkové soustavy -> 100000102. Zbývá mantissa, kterou však již již v podstatě disponujeme. Protože normovaný tvar neuchovává jedničku před čárkou využijeme pouze  ,010101. Výsledek vypadá takto:

0 10000010 01010100000000000000000

K ověření poslouží tato pomůcka.

Převod celého čísla do binární reprezentace

Následující text přehledně popisuje převod celého čísla v desítkové soustavě do binární podoby s pomocí několika rozdílných metod.

Výpočet hodnoty v dvojkové reprezentaci

Mezi jeden z nejzákladnějších úkonů patří převedení desítkového údaje do binární podoby. K dosažení tohoto cíle existuje několik metod, osobně za obzvláště efektivní považují postupné dělení. Zvolme si číslo 10010, kde dolní index značí použitou soustavu a proveďme samotný přepočet.

  • 100 : 2 = 50, zbytek 0
  • 50 : 2 = 25, zbytek 0
  • 25 : 2 = 12, zbytek 1
  • 12 : 2 = 6, zbytek 0
  • 6 : 2 = 3, zbytek 0
  • 3 : 2 = 1, zbytek 1
  • 1 : 2 = 0, zbytek 1
Postupně celočíselně dělíme zbývající části původního čísla dvojkou a pamatujeme si zbytky. Ty následně zapíšeme v obráceném pořadí a získáváme výsledný údaj – 11001002.

Dvojkově desítkový kód

Následující způsob převodu čísla si nejprve vstupní informaci rozdělí na jednotlivé cifry v desítkové soustavě a provede jejich transformaci s pomocí výše zmíněného postupu do binární podoby. Číslo 100 se tedy promění na tři části – 1, 0 a 0. Každá třetina využívá k uchování informace čtyři pozice, výsledek vzniká jejich spojením.

  • 110 = 00012
  • 010 = 00002
  • 010 = 00002
Dohromady tedy 0001000000002.

Přímý kód

Do hry nám vstupuje nutnost uložení i záporných záznamů. S jednoduchým řešením přichází princip vložení speciálního bitu, jenž indikuje přítomnost znaménka. Nejprve provedeme převod do binární podoby a poté na začátek přidáme příslušný bit (1 pro záporné číslo, kladný údaj získá 0).

  • 10010 = 011001002
  • -10010 = 111001002

Aditivní kód

S opravdu zajímavým řešením se o slovo hlásí následující princip vyžadující znalost určité konstanty. Ta se po získání dvojkové podoby k mezivýsledku binárně připočítá. Jako konstantu v tomto případě zvolíme např. 128 (27), což se rovná 100000002.

  • 10010 = 11001002 + 100000002 = 111001002
V případě záporného údaje pro rychlý výpočet použijeme odlišný postup. Nejprve od konstanty v desítkové soustavě odečteme absolutní hodnotu vstupního údaje a výsledek převedeme do dvojkové reprezentace.
  • -10010 = 128 – |-100| = 2810
  • 2810 = 111002

Inverzní kód

V případě kladného čísla se inverzní kód nijak neprojeví, spoléhá totiž na standardní převod do binární soustavy. U záporného údaje provede logickou negaci všech cifer a na začátek přidá bit o hodnotě 1 symbolizující znaménko.

  • na -100 aplikujeme absolutní hodnotu
  • 10010 = 11001002 (převod do dvojkové podoby)
  • 0011011 (logická negace)
  • 10011011 (přidání bitu)

Doplňkový kód

S podobným principem jako inverzní kód přichází i tato metoda. Kladná čísla opět nechává netknutá. U záporných také neguje cifry, přičemž navíc přidává binární připočítání hodnoty 1. Závěrem vstupuje na scénu bit s hodnotou 1 umístěný na začátek k signalizaci znaménka.

  • na -100 aplikujeme absolutní hodnotu
  • 10010 = 11001002 (převod do dvojkové podoby)
  • 0011011 (logická negace)
  • 0011100 (binární přičtení hodnoty 1)
  • 10011100 (přidání bitu)