Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 28. 05. 2016 18:24

Kajo1354
Příspěvky: 34
Reputace:   
 

Prevod čísla

Dobrý deň...chcel by som vysvetliť ako prevediem číslo -89,368 do binárnej sústavy s pevnou radovou čiarkou vo formate Q7,8

Offline

 

#2 29. 05. 2016 02:15

dzejkob
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Prevod čísla

Asi budeme předpokládat, že nemůžeme použít bitové operace v jazyce + to číslo v daném formátu uložené nebude.

Takže nejdříve bych odělil část před desetinnou čárkou a část za ní - na to má každý jazyk funkci, nejpravděpodobněji floor.

Číslo před čárkou je floor(cislo) a číslo za čárkou je (cislo - floor(cislo))

Kdyby bylo číslo unsigned (bez znaménka), tak algoritmus projede všechny bity od nejvyššího:

128 - je menší než 89? ne = 0
64 - je menší než 89? ano = 1 (odečtu 64)
32 - je menší než 25? ne = 0
16 - je menší než 25? ano = 1 (odečtu 16)
8 je menší než 9? ano = 1 (odečtu 9)
4 je menší než 1? ne = 0
2 je menší než 1? ne = 0
1 je rovno 1 = 1

číslo před čárkou pak je 01011001. Pokud jde ale o signed číslo a je záporné, tak první bit bude 1 a bude představovat záporné číslo tedy -128

algoritmus tedy jede obdobně, nicméně od testovaného čisla odečte 128, takže hledá rozdíl, což je 39:

-128 = 1
64 - ne = 0
32 - ano = 1 (7)
16 - ne = 0
8 - ne = 0
4 - ano = 1 (3)
2 - ano = 1 (1)
1 - ano = 1

číslo před čárkou je 10100111

Potom pokračujeme u části za čárkou. Tam platí, že první bit je 2 na mínus prvou (tj 1/2), druhý bit je 2 na mínus druhou (tj 1/4) atd. Postupujeme tedy následovně:

1/2 je menší než 0,368? ne = 0
1/4 je menší než 0,368? ano = 1 (odečtu 0,25)
1/8 je menší než 0,118? ne = 0
1/16 je menší než 0,118? ano = 1 (odečtu 0.0625)
1/32 je menší než 0.0555? ano = 1 (odečtu 0.03125)
1/64 je menší než 0.02425? ano = 1 (odečtu 0.015625)
1/128 je menší než 0.008625? ano = 1 (odečtu 0.0078125)
1/256 je menší než 0.0008125? ne = 0 (víc bitů nemáme)

potom to je odspodu (2 + 4 + 8 + 16 + 64) / 256 = 94 / 256

když těch 368 / 1000 převedeme na základ 256 - tak vyjde 94.208 / 256 - takže snažit se toto číslo vyjádřit v dvojkové soustavě, zaokrouhleno nahoru nebo dolů, může být taky cesta.

Číslo tedy je v Q7,8 10100111_01011110

Offline

 

#3 29. 05. 2016 13:00

Kajo1354
Příspěvky: 34
Reputace:   
 

Re: Prevod čísla

to mám to isté ako keby som si číslo 89 dal dvojkového doplnku? (inverzia + pripočítanie 1)
PR:

89 =    1011001
           0100110  - inverzia
          +         1  - pripočítam jedntoku a vyjde mi dvojkový doplnok
-89 = 10100111 - pridám znamienkový bit

Offline

 

#4 29. 05. 2016 23:01

dzejkob
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Prevod čísla

Jo, taky to tak jde. Kdyby první bit představoval -127, tak by to byla přesná inverze a nula by se dala reprezentovat buď samými nulami, nebo samými jedničkami. Neboť jde ale o převod dec to bin, tak to moc nepomůže.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson