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
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
:::::<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
* 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> ||
|-
| D<sub>2</sub> ||
|-
| D<sub>3</sub> ||
|-
| D<sub>4</sub>||
|}
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'''
:::::<math>\N=b^{n}=cost\qquad b\cdot n=min </math>
Immaginando ora di far variare '''b'''
:::::::<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 '''
Poiché 2<e<3 si potrebbe scegliere tanto il 2 quanto il 3 come base ma per motivi tecnici
Vediamo ciò con un esempio pratico: il numero 999<sup>10</sup>=111101111<sub>2</sub> (il numero in basso sta
{| 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> ||
|-
| D<sub>2</sub> ||
|-
| D<sub>3</sub> ||
|}
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> ||
|-
| S<sub>1</sub> || 1 || 1 || 1 || 1 ||
|}
È facile vedere che nel primo caso occorrono 30 stati diversi, mentre nel secondo solo 20,
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.
== 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
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 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.
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
* 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
▲* 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.▼
▲
Sarà allora
Line 131 ⟶ 132:
::<math>X'=X_{b'}=(x_n)_{b'}(b^n)_{b'}</math>
▲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'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:▼
▲È 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
:::::<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 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>'''
{| class="wikitable"
Line 355 ⟶ 348:
::::::<math>C_{2^n}(X)=2^n-X</math>
▲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
::::::<math>C_1(X)=2^n-X-1</math>
Esempio: sia '''X'''=11001
:::::::<math>C_1(X)=1000000-11001=110</math>
Nel sistema binario il complemento
:::::::<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
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
:::<math>A-B=\quad 111-</math>
::::::<math>\underline {....10}</math>
Line 404 ⟶ 395:
=== Moltiplicazione e divisione in binario ===
[[File:Example of moltiplication.png|right]]
{{clear}}
Line 410 ⟶ 401:
[[File:Example of division.png|right]]
''Divisione''
{{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
== Conversioni da un sistema di numerazione
=== 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
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>'''
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
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
''Numeri con parte intera e parte frazionaria''. Si procede in due tempi: si applica il metodo (a) alla parte intera
=== 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>,
::::::::<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.
::::::<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>
|