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

Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica
mNessun oggetto della modifica
Riga 1:
{{Algebre booleane e progetto logico dei calcolatori digitali}}
 
== Struttura della memoria dal punto di vista operativo ==
In un calcolatore digitale la memoria è l'organo capace di conservare dei dati e delle istruzioni codificati in un certo modo. Si pone così il problema di cercare qual è il supporto migliore per memorizzare un'informazione. Dato un dispositivo che può assumere b stati diversi, è possibile codificare un numero in una certa base associando ada ogni stato una cifra del numero in questione.
 
Per esempio, si pensi di avere un dispositivo capace di assumere 10 stati diversi (S<sub>0</sub>, S<sub>1</sub>, S<sub>2</sub>... S<sub>9</sub>) e di associare ada ognuno di essi una delle dieci cifre base del sistema decimale nel seguente modo:
 
:::::<math>S_0=0\quad S_1=1......S_9=9</math>
 
Ora se si vuole codificare il numero 3541 abbiamo bisogno di quattro dispositivi (perché quattro sono le cifre del numero da codificare) che chiameremo D<sub>1</sub>,D<sub>2</sub>, D<sub>3</sub> e D<sub>4</sub>, dove
 
* D<sub>4</sub> assumerà lo stato corrispondente al numero delle unità
Line 18 ⟶ 19:
! Stato !! S<sub>0</sub> !! S<sub>1</sub> !! S<sub>2</sub> !! S<sub>3</sub> !! S<sub>4</sub> !! S<sub>5</sub> !! S<sub>6</sub> !! S<sub>7</sub> !! S<sub>8</sub> !! S<sub>9</sub>
|-
| D<sub>1</sub> || || || || 3 || || || || || ||
|-
| D<sub>2</sub> || || || || || || 5 || || || ||
|-
| D<sub>3</sub> || || || || || 4 || || || || ||
|-
| D<sub>4</sub>|| || 1 || || || || || || || ||
|}
 
Line 31 ⟶ 32:
Vediamo ora come si può arrivare a dire che la base '''2''' è la più conveniente nel senso che a parità di numero di informazioni da memorizzare è necessario il minor numero di stati.
 
Si è visto che per memorizzare un numero di '''n''' cifre in base '''b''' occorre un dispositivo che contiene '''b'''x&times;'''n''' stati diversi e capace di memorizzare '''N=b<sub>n</sub>''' informazioni diverse; il problema si pone quindi:
 
:::::<math>\N=b^{n}=cost\qquad b\cdot n=min </math>
 
Immaginando ora di far variare '''b''' ede '''n''' con continuità si hanno le condizioni estremali:
 
:::::::<math>n db+b\lg b\ dn=0</math>
Line 41 ⟶ 42:
:::::<math>\frac{\partial (b\cdot n)}{\partial b}db+\frac{\partial (b\cdot n)}{\partial n}dn=0\qquad n db+b dn=0</math>
 
dalle quali segue che '''lg b=1''' cioè '''b=e''' che si può verificare è effettivamente un punto di minimo per la funzione '''b×nb'''&times;'''n''' con la condizione di '''b<sup>n</sup>=cost.'''
 
Poiché 2<e<3 si potrebbe scegliere tanto il 2 quanto il 3 come base ma per motivi tecnici 8ad(ad esempio quelli riguardanti il vantaggio dei dispositivi bistabili) si è scelta la base 2.
 
Vediamo ciò con un esempio pratico: il numero 999<sup>10</sup>=111101111<sub>2</sub> (il numero in basso sta ada indicare la base, il passaggio dalla base 10 alla base 2 verrà trattato in seguito). Allora volendo costruire i dispositivi atti a rappresentarli avremo:
 
{| class="wikitable"
Line 51 ⟶ 52:
! Disp. !! S<sub>0</sub> !! S<sub>1</sub> !! S<sub>2</sub> !! S<sub>3</sub> !! S<sub>4</sub> !! S<sub>5</sub> !! S<sub>6</sub> !! S<sub>7</sub> !! S<sub>8</sub> !! S<sub>9</sub>
|-
| D<sub>1</sub> || || || || || || || || || || 9
|-
| D<sub>2</sub> || || || || || || || || || || 9
|-
| D<sub>3</sub> || || || || || || || || || || 9
|}
 
Line 62 ⟶ 63:
! ..... !! D<sub>1</sub> !! D<sub>2</sub> !! D<sub>3</sub> !! D<sub>4</sub> !! D<sub>5</sub> !! D<sub>6</sub> !! D<sub>7</sub> !! D<sub>8</sub> !! D<sub>9</sub> !! D<sub>10</sub>
|-
| S<sub>0</sub> || || || || || || 0 || || || ||
|-
| S<sub>1</sub> || 1 || 1 || 1 || 1 || || 1 || 1 || 1 || 1 || 1
|}
 
È facile vedere che nel primo caso occorrono 30 stati diversi, mentre nel secondo solo 20, ede inoltre nel primo si possono memorizzare 10<sub>3</sub>=1000 informazioni mentre nel secondo 2<sup>10</sup>=1024 informazioni.
 
Visto che la base 2 è migliore, vediamo come sono organizzati i dispositivi atti a memorizzare un numero in tale base.
 
Logicamente essi saranno in grado di assumere due stati diversi a cui diamo i valori: '''1''' o '''0'''; '''+''' o '''-'''; '''vero''' o '''falso'''.
 
I dispositivi vengono raggruppati (fisicamente) in insiemi, l'insieme delle informazioni binarie in essi contenute viene chiamato voce.
 
AdA ogni insieme viene associato un numero (indirizzo) che ci permette di accedere alla voce. Per esempio se si ha bisogno di conservare da qualche parte una informazione si da al computer l'istruzione di memorizzarla nella voce, per es.esempio, 001.
 
== Sistemi di numerazione ==
{{vedi pedia|Sistemi di numerazione}}
La nozione di numero è una delle nozioni fondamentali dell'aritmetica e della matematica. Non tracceremo qui né la storia di questa nozione né descriveremo l'evoluzione che ha portato alle definizioni assiomatiche dei numeri. Constateremo solamente che in pratica i numeri ci risultano accessibili grazie ada una rappresentazione che in generale è decimale, ma può anche essere di tipo differente (sessagesimale, romana...). Un metodo di rappresentazione costituisce quello che si chiama un sistema di numerazione. Il sistema più usato nella vita corrente è quello decimale.
 
Consideriamo il numero:
Line 94 ⟶ 95:
 
* la posizione di una cifra indica la potenza di cui essa è coefficiente nel calcolo della somma
* in assenza di una potenza nella somma si mette uno '''0''' nella posizione corrispondente
 
non è necessario scrivere gli eventuali zeri a sinistra dell'ultima cifra non nulla.
Line 101 ⟶ 102:
 
Il numero '''10''', in funzione delle cui potenze si esprime il numero '''N''', viene detto la base del sistema e sono necessari 10 simboli distinti 0, 1, 2, 3....9 per scrivere un numero.
 
L'utilizzazione della base 10 non è legata ad alcuna necessità logica o matematica ma probabilmente a considerazioni di tipo pratico; comunque si è fatto uso anche di altri sistemi di numerazione (base 12, 20, 60 in particolare). Si può allora generalizzare questa nozione di numerazione di posizione al modo seguente: dato un numero intero b>1, detto base del sistema del sistema di numerazione considerato, è b simboli distinti
L'utilizzazione della base 10 non è legata ad alcuna necessità logica o matematica ma probabilmente a considerazioni di tipo pratico; comunque si è fatto uso anche di altri sistemi di numerazione (base 12, 20, 60 in particolare). Si può allora generalizzare questa nozione di numerazione di posizione al modo seguente: dato un numero intero b>1, detto base del sistema del sistema di numerazione considerato, è b simboli distinti x<sub>0</sub>, x<sub>1</sub>.....x<sub>{b-1}</sub>, si fa la convenzione di scrivere un numero intero sotto la forma:
 
:::::::<math>X_b=x_n x_{n-1}....x_0 </math>
Line 112 ⟶ 113:
::::::::<math>X_b=\sum_{k=0}^{k=n} x_kb^k</math>
 
Ogni simbolo x<sub>n</sub>...x<sub>k</sub>....x<sub>0</sub> è uno fra i b simboli utilizzati per rappresentare i numeri da 0 a b-1.br/>
Data la rappresentazione x<sub>n</sub>x<sub>{n-1}</sub>.....x<sub>0</sub> la sommatoria fornisce X univocamente, e inversamente si può dimostrare che la rappresentazione x<sub>n</sub>x<sub>{n-1}</sub>....x<sub>0</sub> di un intero è unica.
 
Data la rappresentazione x<sub>n</sub>x<sub>{n-1}</sub>.....x<sub>0</sub> la sommatoria fornisce X univocamente, e inversamente si può dimostrare che la rappresentazione x<sub>n</sub>x<sub>{n-1}</sub>....x<sub>0</sub> di un intero è unica.
Nota 1:
* Per b=2 si ha un sistema di numerazione binario
* " b=8 ottale
* " b=10 decimale
* " b=12 dodecasimale
* " b=16 esadedcimale
* " b=60 sessagesimale
 
'''Nota 21''':
 
* Per b=2 si ha un sistema di numerazione binario
Se si effettua la somma in un altro sistema di numerazione, il risultato sarà un numero X. Ad esempiosi può utilizzare un sisterma di posizione ma con una base '''b'''' diversa.
* " b=8 ottale
* " b=10 decimale
* " b=12 dodecasimale
* " b=16 esadedcimale
* " b=60 sessagesimale
 
Se'''Nota 2''': se si effettua la somma in un altro sistema di numerazione, il risultato sarà un numero X. Ad esempiosi può utilizzare un sisterma di posizione ma con una base '''b'''' diversa.
 
Sarà allora
Line 131 ⟶ 132:
::<math>X'=X_{b'}=(x_n)_{b'}(b^n)_{b'}</math>
 
ConsideriamoEsempio: consideriamo il numero rappresentato in ottale da: X<sub>8</sub>= 3017.
Esempio:
 
Consideriamo il numero rappresentato in ottale da: X<sub>8</sub>= 3017.
 
Questo numero può essere rappresentato in decimale al modo seguente:
Line 141 ⟶ 140:
e quindi il numero che si scrive X<sub>8</sub>=3017 in ottale diventa X<sub>10</sub>=1551 in decimale.
L'''Nota 3''': l'indice k ha nome peso o rango: il peso più debole è 0, quello più forte è n.
Nota 3
 
È'''Nota 4''': è da notare la distinzione tra un numero e la sua rappresentazione; tale distinzione è importante ede interviene nei problemi di conversione di un numero da un sistema di numerazione ada un altro.
L'indice k ha nome peso o rango: il peso più debole è 0, quello più forte è n.
 
Le definizioni precedenti si riferiscono a numeri interi. In generale si avranno espressioni comprendenti una parte intera e una frazionaria che scriveremo:
Nota 4:
 
È da notare la distinzione tra un numero e la sua rappresentazione; tale distinzione è importante ed interviene nei problemi di conversione di un numero da un sistema di numerazione ad un altro.
 
Le definizioni precedenti si riferiscono a numeri interi. In generale si avranno espressioni comprendenti una parte
intera ed una frazionaria che scriveremo:
 
:::::<math>X_b=x-_n x_{n-1} ...x_{-1} x_{-2}.....x_{-m}....</math>
Line 170 ⟶ 164:
:::::::::<math>N_2=\sum_{i=1}^{i=n}x_i2^i</math>
 
in cui i simboli x<sub>i</sub> assumono i valori o '''0''' o '''1''' per ogni valore di '''i''' sono detti cifre binarie o ''digits''.
 
Esempio:
Line 177 ⟶ 171:
:::::<math>N_10=2^3+2^1+2^0,2{-1}+2^{-2}=11,75</math>
 
Con'''Nota: ''' con n cifre decimali è possibile rappresentare 10<sup>n</sup> numeri. Per rappresentare questi numeri nel sistema binario è necessario un numero di cifre binarie '''m''' tali che
Nota:
 
Con n cifre decimali è possibile rappresentare 10<sup>n</sup> numeri. Per rappresentare questi numeri nel sistema binario è necessario un numero di cifre binarie '''m''' tali che
 
:::::::::::<math>2^m>10^n</math>
 
cioè
 
:::::::::::<math>m>3,32\cdot n</math>.
 
Line 272 ⟶ 265:
::::::::<math>S:\qquad 110000001</math>
''Sottrazione''. In modo analogo si ha la tabella 2.4, che fornisce per ogni rango, la sottrazione '''S<sub>i</sub>''' ede il riporto '''r<sub>{i+1}</sub>''' per la sottrazione '''S=X-Y'''.
 
{| class="wikitable"
Line 355 ⟶ 348:
::::::<math>C_{2^n}(X)=2^n-X</math>
 
SiaEsempio: sia il numero X=11001 di cinque cifre. Il suo complemento vero (detto anche [[w:Complemento a due|complemento a due]]) sarà:
Esempio:
 
Sia il numero X=11001 di cinque cifre. Il suo complemento vero (detto anche [[w:Complemento a due|complemento a due]]) sarà:
 
::::::<math>C_{2^5}X=100000-11001=111</math>
 
Si definisce invece [[w:complemento a uno|complemento ada '''1''']] di un numero intero binario '''0<X<2'n''' la quantità:
 
::::::<math>C_1(X)=2^n-X-1</math>
Esempio:
 
Esempio: sia '''X'''=11001:. Il suo complemento ada '''1''' sarà:
 
:::::::<math>C_1(X)=1000000-11001=110</math>
 
Nel sistema binario il complemento ada '''1''' di un numero può essere ottenuto direttamente scambiando nella rappresentazione del numero stesso gli '''1''' con gli '''0'''. Conoscendo il complemento ada '''1''' di un numero binario si può ottenere il complemento vero sommando un '''1''':
 
:::::::<math>C_{2^n}(X)=C_1(X)+1</math>
 
Si può ora utilizzare la definizione di complemento e quella di classi residuo modulo '''m''' per costruire un algoritmo in grado di calcolare una sottrazione mediante una un'operazione di somma.
 
Siano '''A''' e '''B''' due numeri tali che:
Line 391 ⟶ 381:
 
b) per '''A-B ≤0''' si ha:
 
:::::::<math>A-B=2^n-|A-B|=|A-B|_{2^n}</math>
 
Line 397 ⟶ 388:
Esempio:
 
::::::<math>A=111\qquad, \qquad B=10</math>
:::<math>A-B=\quad 111-</math>
::::::<math>\underline {....10}</math>
Line 404 ⟶ 395:
=== Moltiplicazione e divisione in binario ===
[[File:Example of moltiplication.png|right]]
*''Moltiplicazione'' -. Il metodo di base è quello che si usa anche in decimale: a seconda che la cifra del moltiplicatore valga '''1''' o '''0''' si aggiunge o no il moltiplicando alla somma parziale, scalando ada ogni passo quest'ultima di un rango verso sinistra:
 
{{clear}}
Line 410 ⟶ 401:
[[File:Example of division.png|right]]
 
''Divisione'' -. Il metodo di base consiste nel sottrarre, come nel sistema decimale, il divisore moltiplicato per il solo fattore possibile e cioè '''1'''.
 
{{clear}}
Line 441 ⟶ 432:
::::::<math>N_8=\qquad ..1\qquad ...3\qquad ....5</math>
 
Il codice ottale è quindi spesso utilizzato come notazione compatta del binario puro. Esso infatti, a causa della semplicità della procedura di conversione, permette di economizzare allora del tempo-macchina o di semplificare i dispositivi di conversione (caso di visualizzazione numerica a cifre luminose).
 
== Conversioni da un sistema di numerazione ada un altro ==
=== Primo metodo ===
''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:
Line 457 ⟶ 448:
 
Infatti:
 
:::::<math>N=y_m b_2^m+y_{m-1}b_2^{m-1}+...+y_1b_2+y_0</math>
 
quindi:
 
Line 466 ⟶ 459:
::::::<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:
Line 472 ⟶ 465:
<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'''.
Line 489 ⟶ 482:
 
:::::::::<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.
 
Line 505 ⟶ 499:
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'''.
Line 519 ⟶ 513:
::::::<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 ede il metodo (b) alla parte frazionaria. Il numero cercato si ottiene mediante unione dei due risultati.
 
=== Secondo metodo ===
Line 528 ⟶ 522:
::::::<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>:
 
::::::::<math>(c)\qquad N_{b_2}=\sum_{-inf.}^n (x_i)_{b_2}\cdot (b_1^i)_{b_2}</math>.
Line 534 ⟶ 528:
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.
 
*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>