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.
-85 v doplňkovém kódu, není to 10101011? Nevypadla tam nula? Jinak díky, informace pomohly.
Děkuji za upozornění
Nechapu to nasobeni 8mi, ikdyz kombinace cislis je spravne. Nejak tam ale vypadla ta pevna carka.
Vetsinou se pouziva treba 7Q8, 7 bitu pro Integer a 8bitu pro float.
Sel bych na to takhle: 10 = 1010bin
0.625 x 2 =
————–
1.25 -> (odecteme 1) 0.25 x 2 =
0.5 x 2 =
1
0.625 = 101bin
V zapisu 7Q8 by to bylo takhle 1 000 1010 101 00000
prvni bit je Sign a urcuje zaporne cislo, dalsich 7 bitu je integer, jenom doplnim nuly a 8 bitu je pro float a taky doplnim nuly.
U plovouci carky potom vime kde je exponent a o kolik desetinnych mist se musi posunout.
vysledek je spravne takto:
1 00000011 101010100000000000000000
znovu prvni cislo reprezentuje znamenko minus, exponent je 3 a nase cislo, zbytek se vyplni nulami.
Ale jinak pekny tutorial
Muzete mi prosim poradit jak bych reprezentoval zaporne desetinne cislo v binarni soustave pomoci pevne radove carky, ktere po vynasobeni zakladu^pocet_desetinnych_mist nedava pekne vysledky, napr, – 10,6 na 5 des. mist ?
Dekuji
Ahoj,ráda bych požádala o pomoc.Potřebovala bych následující kod převést do podoby GPS souřadnic.Ale mé chápání to prostě nezvládá.Najde se tu někdo,kdo pomůže?Díky
01000111011100100110000101110100011101010110110001110101011010
10011010010010110000100000011011010110000101110100011001010010
00000111011001111001011011000111010101110011011101000110010101
10111001101111001000010010000001000011011000010110001101101000
01100101001000000110111001100001011010100110010001100101011101
00011001010010000001101110011000010010000001110011011011110111
01010111001001100001011001000110111001101001011000110110100101
10001101101000001000000100111000100000001101000011100110110000
00110101001101110010111000110010001110000011001100100111001000
00010001010011000000110001001101101011000000110000001101110010
11100011011000110100001100110010011100101110001000000100100001
10111101100100011011100110010100100000011100110111010001100101
01110011011101000110100100100000011100000111001001101001001000
00011011000110111101110110011101010010000100100000001110100010
1001
Tak to je jasné, to je blízko nekonečna!