Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Dělení 32bit/16bit číslem

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Izmail



Založen: Sep 26, 2008
Příspěvky: 157

PříspěvekZaslal: pá květen 08 2009, 11:26    Předmět: Dělení 32bit/16bit číslem Citovat

Ahoj,
chtěl jsem se zeptat, nevíte jak napsat program, který bi dělil 32bit/16bit číslo. Na internetu jsou těch programů mraky, jeden mám, funguje, ale ani opakujícím se krokováním pořád nechápu princip.
Zde
http://www.volny.cz/rotterp/as5132bitovedeleni.htm
jsem četl, že to můžu dělit, jako dekadicka čísla pod sebou, což na papíře jde kdybych dělil 16bit/8bit i do programu se mi to podarilo zapsat. ALe jak udelat 32bit/16bit to netusim. Nejde mi ani tak o rychlost programu jako spis o to, aby to bylo zrejme.
Děkuji za radu


Naposledy upravil Izmail dne pá květen 08 2009, 14:26, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Bernard



Založen: May 27, 2005
Příspěvky: 3648

PříspěvekZaslal: pá květen 08 2009, 14:26    Předmět: Citovat

Když se dohodneme, že obě čísla - jak 32bitové tak 16bitové - jsou čísla celá, tak jaký problém. Jednoduše číslo, které může být nejvíc 4.294.967.295 dělíš číslem, které je nejvíc 65.535. Jediná komplikace je asi v tom, že se programuje v assembleru, dělení má provést 8-bitový procesor, takže dělenec zabírá 4 paměťová místa, dělitel 2 a pro podíl třeba rezervovat také 4 - co kdyby se dělilo jednotkou. A tak z dělení je nakonec odčítání, trochu rozhodování a plno operací čtení a zápisu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Izmail



Založen: Sep 26, 2008
Příspěvky: 157

PříspěvekZaslal: pá květen 08 2009, 14:51    Předmět: Citovat

Ano, jsou to vsechno cela cisla ale problem vidim v tom, jak to zapsat do programu, kdyz do delim postupne jako na papire, tak delim prvne prvni cast delence delitelem, ale jak mam delit 16bitovim delitelem?

Bernard napsal(a):
A tak z dělení je nakonec odčítání, trochu rozhodování a plno operací čtení a zápisu.
Nechapu, jak odcitani?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Bernard



Založen: May 27, 2005
Příspěvky: 3648

PříspěvekZaslal: pá květen 08 2009, 15:45    Předmět: Citovat

Nikoho nechci podceňovat, jen to podat názorně, tedy:
Dělení je opakované odčítání, například dekadicky 101:2 znamená, že odpočítávám dvojku, dokud to jde: 99,97,95.....31,29...........3,1 a dost. Kolikrát se podařilo odčítat? 50x, tak výsledek je 50.
Máme ale rychlejší postup, budeme odčítat 20 místo 2:
81,61,41,21,1 a dost. Podařilo se 5x , ale výsledek je 10x větší, zase 50.
A tímto principem dělíme i binární čísla.

Příklad: 1.000.000.000 : 65.000 = ?

00111011 10011010 11001010 00000000 (miliarda)

00000000 00000000 11111101 11101000 (65.000)

Aby byl výpočet rychlejší, budeme zkoušet odečítat násobek 65000 x 2^n, a to n tak velké, jak to jde.

00111011 10011010 11001010 00000000 (miliarda)

00111111 01111010 00000000 00000000 (65.000 x 2^14)

Teď jsou jednotky nejvyšších řádů pod sebou. ale odečítáme větší číslo od menšího, tak jsme přestřelili. Znovu:

00111011 10011010 11001010 00000000 (miliarda)

00011111 10111101 00000000 00000000 (65.000 x 2^13)
-----------------------------------------------
00011011 11011101 11001010 00000000 výsl: 00000000 00000000 00100000 00000000

A jdeme dál:

00011011 11011101 11001010 00000000 (minulý zbytek)

00001111 11011110 10000000 00000000 (65.000 x 2^12)
------------------------------------------------
00001011 11111111 01001010 00000000 výsl. 00000000 00000000 00110000 00000000

A tak dál. Když se odečítat dá, ve výsledku se na tom řádě n objeví 1, jinak 0. Když je n=0, je poslední pokus odečíst těch 65000, co zůstane, je zbytek.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.19 sekund