Dělení 32bit/16bit číslem
Moderátor: Moderátoři
Dělení 32bit/16bit číslem
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
Nechapu, jak odcitani?Bernard píše: A tak z dělení je nakonec odčítání, trochu rozhodování a plno operací čtení a zápisu.
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.