{"id":3368,"date":"2012-09-18T00:00:00","date_gmt":"2012-09-17T22:00:00","guid":{"rendered":""},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T22:00:00","slug":"3368","status":"publish","type":"post","link":"https:\/\/www.vialattea.net\/content\/3368\/","title":{"rendered":"salve. una domanda che pu\u00f2 interessare a tutti: come fa un computer a moltiplicare e a dividere due numeri con le porte logiche? esiste la possibilit\u00e0 di avere uno schema elettrico?\r\ngrazie e complimenti per il sito."},"content":{"rendered":"<p>Vi sono vari metodi per eseguire le moltiplicazioni e le divisioni dei numeri binari. Il metodo concettualmente pi&ugrave; semplice &egrave; quello delle addizioni ripetute per fare la moltiplicazione e delle sottrazioni ripetute per fare una divisione.<\/p>\n<p>Per eseguire la moltiplicazione&nbsp;&nbsp; a&middot;b&nbsp;&nbsp; basta fare la somma&nbsp;&nbsp; a+a+a+&#8230;+a&nbsp;&nbsp; per b volte, mentre per eseguire la divisione&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; a\/b&nbsp;&nbsp; si far&agrave;&nbsp;&nbsp;&nbsp;&nbsp; a-b-b&#8230;-b&nbsp; fino ad arrivare a zero: il numero di sottrazioni d&agrave; il quoziente.<\/p>\n<p>Quindi per fare le moltiplicazioni e le divisioni &egrave; necessario saper fare le addizioni (le sottrazioni sono un caso particolare delle addizioni, e addirittura codificando i numeri in un formato particolare, cio&egrave; in complemento a 2, non vi &egrave; alcuna differenza tra le due operazioni). L&#8217;addizione di due numeri binari si fa come per quelli decimali: si mettono in colonna e si sommano le singole cifre:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a<sub>n<\/sub>&nbsp;&nbsp; a<sub>n-1<\/sub>&nbsp;&nbsp; &#8230;&nbsp;&nbsp; a<sub>1<\/sub>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a<sub>0<\/sub>&nbsp;&nbsp; +<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b<sub>n<\/sub>&nbsp;&nbsp; b<sub>n-1<\/sub>&nbsp;&nbsp; &#8230;&nbsp;&nbsp; b<sub>1<\/sub>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b<sub>0<\/sub>&nbsp;&nbsp; =<\/p>\n<hr \/>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a<sub>0<\/sub>+b<sub>0<\/sub><\/p>\n<p>in decimale se la somma delle cifre raggiunge dieci si scrive l&#8217;ultima cifra e si riporta la decina sulla colonna successiva, analogamente per i binari se la somma raggiunge 2 (10)b si scrive 0 e si riporta 1 sulla colonna successiva:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a<sub>n<\/sub>&nbsp;&nbsp; a<sub>n-1<\/sub>&nbsp;&nbsp; &#8230;&nbsp;&nbsp; a<sub>1<\/sub>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a<sub>0<\/sub>&nbsp;&nbsp; +<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b<sub>n<\/sub>&nbsp;&nbsp; b<sub>n-1<\/sub>&nbsp;&nbsp; &#8230;&nbsp;&nbsp; b<sub>1<\/sub>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b<sub>0<\/sub>&nbsp;&nbsp; +<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c<sub>n<\/sub> &nbsp;&nbsp; c<sub>n-1<\/sub>&nbsp;&nbsp; &#8230;&nbsp;&nbsp; c<sub>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =<br \/>\n<\/sub><\/p>\n<hr \/>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s<sub>n<\/sub>&nbsp;&nbsp; s<sub>n-1<\/sub>&nbsp;&nbsp; &#8230;&nbsp;&nbsp; s<sub>1<\/sub>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s<sub>0<\/sub><\/p>\n<p>Il circuito che implementa questa operazione &egrave; abbastanza semplice e soprattutto &egrave; modulare, cio&egrave; pu&ograve; essere composto da un numero arbitrario di cellette elementari per poter fare addizioni di una lunghezza voluta.<br \/>\nL&#8217;operazione di addizione di due numeri ad un bit &egrave; uguale alla operazione di XOR (or esclusivo) che d&agrave; uno se uno solo degli ingressi &egrave; uno:<br \/>\nquesta &egrave; la tabella della verit&agrave; di questa operazione e a fianco &egrave; riportato il simbolo circuitale<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"433\" height=\"118\" src=\"\/spaw\/image\/informatica\/Dario\/r74tab1.jpg\" alt=\"\" \/><\/p>\n<p>Per eseguire le operazioni su numeri a pi&ugrave; bit bisogna considerare il riporto (carry in inglese): la celletta elementare che esegue la somma ad un bit con il riporto si chiama sommatore completo (full-adder)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"332\" height=\"199\" alt=\"\" src=\"\/spaw\/image\/informatica\/Dario\/r74tab2(1).jpg\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"622\" height=\"356\" src=\"\/spaw\/image\/informatica\/Dario\/r74f2.jpg\" alt=\"\" \/><\/p>\n<p>Per moltiplicare due numeri di n bit ciascuno occorre allora un sommatore completo a 2&middot;n bit ed occorrono 2<sup>n<\/sup>-1 iterazioni (nel caso peggiore): per numeri di 32 bit sono 4 miliardi di iterazioni (!)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"597\" height=\"260\" src=\"\/spaw\/image\/informatica\/Dario\/r74f3.jpg\" alt=\"\" \/><\/p>\n<p>Il problema di questo approccio &egrave; l&#8217;elevato numero di operazioni. Si risparmiano molte operazioni facendo la moltiplicazione come per i numeri decimali, sommando i prodotti parziali del moltiplicando con le singole cifre del moltiplicatore:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"371\" height=\"228\" src=\"\/spaw\/image\/informatica\/Dario\/r74f4.jpg\" alt=\"\" \/><\/p>\n<p>In questo caso il numero di moltiplicazioni e di addizioni &egrave; n<sup>2<\/sup> cio&egrave; circa 1000 per numeri di 32 bit, inoltre n di esse vengono eseguite in parallelo tramite una rete combinatoria, quindi il risultato &egrave; quasi istantaneo, a parte il ritardo di transito nelle porte logiche.<\/p>\n<p>I prodotti bit a bit sono effettuati tramite l&#8217;operazione AND, di cui &egrave; riportata la tabella di verit&agrave; e il simbolo circuitale:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"453\" height=\"114\" src=\"\/spaw\/image\/informatica\/Dario\/r74tab3a.jpg\" alt=\"\" \/><\/p>\n<p>Le somme in colonna sono implementate con dei full adder.<br \/>\nEsistono anche altri algoritmi ancora pi&ugrave; efficienti.<\/p>\n<p>La divisione, oltre al metodo banale e impraticabile delle sottrazioni ripetute, pu&ograve; essere effettuata ancora con il metodo standard della divisione dei numeri decimali:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"347\" height=\"172\" src=\"\/spaw\/image\/informatica\/Dario\/r74f6.gif\" alt=\"\" \/><\/p>\n<p>L&#8217;algoritmo si implementa con un&#8217;iterazione da 1 a n, due shift register e un sommatore a 2&middot;n bit.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[&#8230;]<\/p>\n","protected":false},"author":155,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[61],"tags":[],"class_list":["post-3368","post","type-post","status-publish","format-standard","hentry","category-hardware"],"_links":{"self":[{"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/posts\/3368","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/users\/155"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/comments?post=3368"}],"version-history":[{"count":0,"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/posts\/3368\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/media?parent=3368"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/categories?post=3368"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vialattea.net\/content\/wp-json\/wp\/v2\/tags?post=3368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}