Algebre booleane e progetto logico dei calcolatori digitali/Sistemi di numerazione, aritmetica binaria: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m wikifico
Riga 415:
== Conversioni da un sistema di numerazione ad un altro ==
=== Primo metodo ===
==== Numeri interi ====
*Numeri interi: Consideriamo un numero N; lo si può scrivere mediante due basi '''b<sub>1</sub>''' e '''b<sub>2</sub>''' ottenendo per '''N''' due espressioni che chiameremo '''N<sub>b1</sub>''' e '''N<sub>b2</sub>'''. Si avrà allora:<br/>
Consideriamo un numero N; lo si può scrivere mediante due basi '''b<sub>1</sub>''' e '''b<sub>2</sub>''' ottenendo per '''N''' due espressioni che chiameremo '''N<sub>b1</sub>''' e '''N<sub>b2</sub>'''. Si avrà allora:
::::::<math>N_{b_1}=x_n x_{n-1}....x_0</math><br/>
::::::<math>N_{b_2}=y_m y_{m-1}....y_0</math><br/>
con le relazioni:<br/>
::::::<math>N=\sum_{i=0}^{i=n}x_i b_1^n=\sum_{k=0}^{k=m}y_k b_2^k</math><br/>
Il problema della conversione è il seguente: data l'espressione '''N<sub>b<sub>1</sub></sub>''' nel sistema di base '''b<sub>1</sub>''' trovare l'espressione '''N<sub>b<sub>2</sub></sub>''' dello stesso numero '''N''' nel sistema di base '''b<sub>2</sub>''', o viceversa. A tale fine osserviamo che '''y<sub>0</sub>''' è il resto della divisione di '''N''' per la base '''b<sub>2</sub>'''.<br/>
Infatti:<br/>
:::::<math>N=y_m b_2^m+y_{m-1}b_2^{m-1}+...+y_1b_2+y_0</math><br/>
quindi:<br/>
:::::<math>(a)\qquad N=(y_m b_2^{m-1}+y_{m-1}b_2^{m-2}+....+y_1)b_2+y_0\qquad (0\le y_0\le b_2)</math><br/>
cioè<br/>
::::::<math>N=N_1 b_2+y_0\qquad \qquad (0\le y_0\le b_2)</math><br/>
Possiamo fare le stesse considerazioni nel numero '''N<sub>1</sub>''' e quindi y<sub>1</sub> sarà il resto della divisione di '''N<sub>1</sub>''' per '''b<sub>2</sub>''' e così via.<br/>
Si vede quindi che si ottengono le cifre successive di '''N<sub>2</sub>''' considerando i resti successivi così ottenuti:<br/>
<math>N=N_1 b_2+y_0\quad N_1= N_2 b_2+y_1\quad N_2= N_3 b_2+y_2....N_m=N_{m+1} b_2+y_m</math><br/>
in cui '''y<sub>0</sub>''', '''y<sub>1</sub>'''....'''y<sub>m</sub>''' rappresentano i resti delle divisioni successive.<br/>
Esempio: convertire '''N<sub>10=3412</sub>''' in base '''8'''.<br/>
Si cercano allora i resti successivi delle divisioni per 8. Si ottiene:<br/>
:::::<math>\frac{3412}{8}\qquad\quad resto=4</math><br/>
 
::::::<math>.\fracN_{426b_1}=x_n x_{8n-1}\qquad\quad resto=2....x_0</math><br/>
::::::<math>N_{b_2}=y_m y_{m-1}....y_0</math>
 
con le relazioni:
:::::<math>..\frac{53}{8}\qquad\quad resto=5</math><br/>
 
::::::<math>...N=\fracsum_{6i=0}^{8i=n}\qquad\quadx_i restob_1^n=6\sum_{k=0}^{k=m}y_k b_2^k</math><br/>
e quindi<br/>
:::::::::<math>N_8=6524</math><br/>
Notiamo che il metodo di conversione tra due basi '''b<sub>1</sub>''' e '''b<sub>2</sub>''' sopra esposto è in teoria applicabile nei due sensi (b<sub>1</sub>→b<sub>2</sub> e b<sub>2</sub>→b<sub>1</sub>). In pratica volendo passare dalla base '''b<sub>1</sub>''' alla base '''b<sub>2</sub>''', è necessario eseguire le operazioni di divisione nella base '''b<sub>1</sub>'''. Quindi quando i calcoli sono fatti a mano non si ricorrerà a questo metodo che per convertire un numero decimale in un'altra base, come nell'esempio visto. Lo stesso discorso non vale nel caso in cui l'operazione di conversione sia meccanizzata mediante un sistema automatico.<br/>
*''Numeri frazionari inferiori all'unità.<br/>
Consideriamo, analogamente al caso precedente, in numero '''N''' in una rappresentazione '''N<sub>b<sub>1</sub></sub>''' in un sistema di base '''b<sub>1</sub>'''; e cerchiamo la rappresentazione '''N<sub>b<sub>2</sub></sub>''' in un sistema di base '''b<sub>2</sub>'''. Notiamo che l'espressione:<br>
::::::<math>N=(0,y_{-1}y_{-2}....y_{-m}......)b_2</math><br/>
significa:<br/>
::::::<math>N=y_{1}\cdot b_2^{-1}+y_{-2}\cdot b_2^{-2}+....+y_m\cdot b_2^{-m}+.....</math>.<br/>
Moltiplicando '''N''' per '''b<sub>2</sub> si ha:<br/>
::::::<math>(b)\qquad\qquad (N\cdot b_2)=y_{-1}+y_{-2}+......+y_{-m}</math><br/>
Cioè la cifra che in ('''N×b<sub>2</sub>''') appare a sinistra della virgola è la prima cifra cercata: y<sub>-1</sub>. Possiamo ora considerare il numero ottenuto conservando solo le cifre a destra della virgola ed applicare lo stesso procedimento: cioè lo si moltiplica per '''b<sub>2</sub>''' e la cifra che risulta a sinistra della virgola sarà '''y<sub>-2</sub>''', ecc,<br/>
Il procedimento considerato può anche non avere termine, e quindi la rappresentazione di un numero frazionario può avere termine in un sistema di numerazione e non averlo in un altro.<br/>
Come per la conversione di numeri interi, si può notare che il metodo qui visto per i numeri frazionari comporta delle moltiplicazioni nel sistyemsa di partenza a base '''b<sub>1</sub>'''. Quindi , per i calcoli a mano, questo metodo si utilizza solamente per le conversioni a partire dal sistema decimale verso una generica base '''b'''.<br/>
Esempio: Convertire '''N<sub>10</sub>=0,71875''' in base 2.<br/>
:::::::::::::<math>..0,71875\cdot 2</math><br/>
::::::<math>parte.intera\qquad 1+\qquad 0,43750\cdot 2</math><br/>
::::::<math>parte.intera\qquad 0+\qquad 0,87500\cdot 2</math><br/>
::::::<math>parte.intera\qquad 1+\qquad 0,75000\cdot 2</math><br/>
::::::<math>parte.intera\qquad 1+\qquad 0,50000\cdot 2</math><br/>
::::::<math>parte.intera\qquad 1+\qquad 0,00000\cdot 2</math><br/>
::::::<math>parte.intera\qquad 0+\qquad 0,00000\cdot 2</math><br/>
e quindi '''N<sub>2</sub>=0,101110''' ha termine dopo la 5<sup>a</sup> cifra.<br/>
*''Numeri con parte intera e parte frazionaria''.<br/>
Si procede in due tempi: si applica il metodo (a) alla parte intera ed il metodo (b) alla parte frazionaria. Il numero cercato si ottiene mediante unione dei due risultati.
 
Il problema della conversione è il seguente: data l'espressione '''N<sub>b<sub>1</sub></sub>''' nel sistema di base '''b<sub>1</sub>''' trovare l'espressione '''N<sub>b<sub>2</sub></sub>''' dello stesso numero '''N''' nel sistema di base '''b<sub>2</sub>''', o viceversa. A tale fine osserviamo che '''y<sub>0</sub>''' è il resto della divisione di '''N''' per la base '''b<sub>2</sub>'''.
 
Infatti:
:::::<math>N=y_m b_2^m+y_{m-1}b_2^{m-1}+...+y_1b_2+y_0</math>
quindi:
 
:::::<math>(a)\qquad N=(y_m b_2^{m-1}+y_{m-1}b_2^{m-2}+....+y_1)b_2+y_0\qquad (0\le y_0\le b_2)</math>
 
cioè
 
::::::<math>N=N_1 b_2+y_0\qquad \qquad (0\le y_0\le b_2)</math>
 
Possiamo fare le stesse considerazioni nel numero '''N<sub>1</sub>''' e quindi y<sub>1</sub> sarà il resto della divisione di '''N<sub>1</sub>''' per '''b<sub>2</sub>''' e così via.
 
Si vede quindi che si ottengono le cifre successive di '''N<sub>2</sub>''' considerando i resti successivi così ottenuti:
 
<math>N=N_1 b_2+y_0\quad N_1= N_2 b_2+y_1\quad N_2= N_3 b_2+y_2....N_m=N_{m+1} b_2+y_m</math>
 
in cui '''y<sub>0</sub>''', '''y<sub>1</sub>'''....'''y<sub>m</sub>''' rappresentano i resti delle divisioni successive.
 
Esempio: convertire '''N<sub>10=3412</sub>''' in base '''8'''.
 
Si cercano allora i resti successivi delle divisioni per 8. Si ottiene:
 
:::::<math>\frac{3412}{8}\qquad\quad resto=4</math>
 
:::::<math>.\frac{426}{8}\qquad\quad resto=2</math>
 
:::::<math>..\frac{53}{8}\qquad\quad resto=5</math>
 
:::::<math>...\frac{6}{8}\qquad\quad resto=6</math>
 
e quindi
 
:::::::::<math>N_8=6524</math>
Notiamo che il metodo di conversione tra due basi '''b<sub>1</sub>''' e '''b<sub>2</sub>''' sopra esposto è in teoria applicabile nei due sensi (b<sub>1</sub>→b<sub>2</sub> e b<sub>2</sub>→b<sub>1</sub>). In pratica volendo passare dalla base '''b<sub>1</sub>''' alla base '''b<sub>2</sub>''', è necessario eseguire le operazioni di divisione nella base '''b<sub>1</sub>'''. Quindi quando i calcoli sono fatti a mano non si ricorrerà a questo metodo che per convertire un numero decimale in un'altra base, come nell'esempio visto. Lo stesso discorso non vale nel caso in cui l'operazione di conversione sia meccanizzata mediante un sistema automatico.
 
==== Numeri frazionari inferiori all'unità ====
Consideriamo, analogamente al caso precedente, in numero '''N''' in una rappresentazione '''N<sub>b<sub>1</sub></sub>''' in un sistema di base '''b<sub>1</sub>'''; e cerchiamo la rappresentazione '''N<sub>b<sub>2</sub></sub>''' in un sistema di base '''b<sub>2</sub>'''. Notiamo che l'espressione:
 
::::::<math>N=(0,y_{-1}y_{-2}....y_{-m}......)b_2</math>
 
significa:
 
::::::<math>N=y_{1}\cdot b_2^{-1}+y_{-2}\cdot b_2^{-2}+....+y_m\cdot b_2^{-m}+.....</math>.
 
Moltiplicando '''N''' per '''b<sub>2</sub> si ha:
 
::::::<math>(b)\qquad\qquad (N\cdot b_2)=y_{-1}+y_{-2}+......+y_{-m}</math>
 
Cioè la cifra che in ('''N×b<sub>2</sub>''') appare a sinistra della virgola è la prima cifra cercata: y<sub>-1</sub>. Possiamo ora considerare il numero ottenuto conservando solo le cifre a destra della virgola ed applicare lo stesso procedimento: cioè lo si moltiplica per '''b<sub>2</sub>''' e la cifra che risulta a sinistra della virgola sarà '''y<sub>-2</sub>''', ecc.
 
Il procedimento considerato può anche non avere termine, e quindi la rappresentazione di un numero frazionario può avere termine in un sistema di numerazione e non averlo in un altro.+
 
Come per la conversione di numeri interi, si può notare che il metodo qui visto per i numeri frazionari comporta delle moltiplicazioni nel sistema di partenza a base '''b<sub>1</sub>'''. Quindi , per i calcoli a mano, questo metodo si utilizza solamente per le conversioni a partire dal sistema decimale verso una generica base '''b'''.
 
Esempio: Convertire '''N<sub>10</sub>=0,71875''' in base 2.
 
:::::::::::::<math>..0,71875\cdot 2</math>
::::::<math>parte.intera\qquad 1+\qquad 0,43750\cdot 2</math>
::::::<math>parte.intera\qquad 0+\qquad 0,87500\cdot 2</math>
::::::<math>parte.intera\qquad 1+\qquad 0,75000\cdot 2</math>
::::::<math>parte.intera\qquad 1+\qquad 0,50000\cdot 2</math>
::::::<math>parte.intera\qquad 1+\qquad 0,00000\cdot 2</math>
::::::<math>parte.intera\qquad 0+\qquad 0,00000\cdot 2</math>
 
e quindi '''N<sub>2</sub>=0,101110''' ha termine dopo la 5<sup>a</sup> cifra.
 
==== Numeri con parte intera e parte frazionaria ====
Si procede in due tempi: si applica il metodo (a) alla parte intera ed il metodo (b) alla parte frazionaria. Il numero cercato si ottiene mediante unione dei due risultati.
 
=== Secondo metodo ===
Dato un numero avente la rappresentazione:<br/>
 
::::::<math>N_{b_1}=x_n x_{n-1}....x_0, x_{-1} x_{-2}....x_{-k}</math><br/>
::::::<math>N_{b_1}=x_n x_{n-1}....x_0, x_{-1} x_{-2}....x_{-k}</math>
si esprimono le cifre x<sub>n</sub>, x<sub>{n-1}</sub>,....,x<sub>0</sub>, x<sub>{-1}</sub> nel sistemadi numerazione b<sub>2</sub> e così anche per le potenze di b<sub>1</sub>: b<sub>1</sub><sup>n</sup> b<sub>1</sub><sup>(n-1)</sup>.... b<sub>1</sub>,b<sub>1</sub><sup>(-1)</sup> e si effettua la somma seguente nel sistema di base b<sub>2</sub>:<br/>
 
::::::::<math>(c)\qquad N_{b_2}=\sum_{-inf.}^n (x_i)_{b_2}\cdot (b_1^i)_{b_2}</math>.<br/>
si esprimono le cifre x<sub>n</sub>, x<sub>{n-1}</sub>,....,x<sub>0</sub>, x<sub>{-1}</sub> nel sistemadi numerazione b<sub>2</sub> e così anche per le potenze di b<sub>1</sub>: b<sub>1</sub><sup>n</sup> b<sub>1</sub><sup>(n-1)</sup>.... b<sub>1</sub>,b<sub>1</sub><sup>(-1)</sup> e si effettua la somma seguente nel sistema di base b<sub>2</sub>:
In questo caso notiamo che il passaggio dalla base b<sub>1</sub> alla base b<sub>2</sub> implica che la somma (c) sia effettuata nel sistema di base b<sub>2</sub>, e quindi questo metodo è quello usato quando è necessario convertire un numero da una base generica a quella decimale nei calcoli fatti a mano.<br/>
 
*Esempio: convertire N<sub>2</sub>=11011,101 in base 10.<br/>
::::::::<math>(c)\qquad N_{10b_2}=1\cdot 2^4+1\cdot 2^3+0\cdot 2^1+1\cdot 2^0+1\cdot 2^sum_{-1inf.}+0\cdot^n 2^(x_i)_{-2b_2}+1\cdot 2(b_1^i)_{-3b_2}=</math><br/>.
 
::::::<math>=16+8+2+1+0,5+0,125=27,625</math><br/>
In questo caso notiamo che il passaggio dalla base b<sub>1</sub> alla base b<sub>2</sub> implica che la somma (c) sia effettuata nel sistema di base b<sub>2</sub>, e quindi questo metodo è quello usato quando è necessario convertire un numero da una base generica a quella decimale nei calcoli fatti a mano.
::::::<math>N_{10}=27,625</math><br/>
 
*Esempio: convertire N<sub>2</sub>=11011,101 in base 10.
 
::::::<math>N_{10}=1\cdot 2^4+1\cdot 2^3+0\cdot 2^1+1\cdot 2^0+1\cdot 2^{-1}+0\cdot 2^{-2}+1\cdot 2^{-3}=</math>
::::::<math>=16+8+2+1+0,5+0,125=27,625</math>
::::::<math>N_{10}=27,625</math>
 
I metodi di conversione esposti si prestano a numerose varianti: i parametri da prendere in considerazione dal punto di vista tecnico consistono essenzialmente nella rapidità di conversione e nella complessità dei dispositivi, in contrasto fra loro.