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

Contenuto cancellato Contenuto aggiunto
Riga 163:
In questo sistema un numero è rappresentato , conformemente alla definizione generale da una successione di 1 e di 0:
 
:::::<math>N_2=x_n x_{n-1}....x_0,x_{-1} x_{-2}....x_m...</math><br/>
 
cioè<br/>
cioè
 
:::::::::<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:<br/>
 
:::::::::<math>N_2=1011,11</math><br/>
:::::::::<math>N_2=1011,11</math>
:::::<math>N_10=2^3+2^1+2^0,2{-1}+2^{-2}=11,75</math>
 
Nota:<br/>
 
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<br/>
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><br/>
 
cioè<br/>
:::::::::::<math>2^m>10^n</math>
 
cioè
:::::::::::<math>m>3,32\cdot n</math>.
 
=== Addizione e sottrazione in binario. Complementazione ===
''Addizione'': consideriamo due numeri<br/>
 
:::::<math>X=x_n x_{n-1}....x_i....x_0</math><br/>
:::::<math>YX=y_nx_n y_x_{n-1}....y_ix_i....y_0x_0</math><br/>
:::::<math>Y=y_n y_{n-1}....y_i....y_0</math>
Si cerca '''S=X+Y'''. A tale scopo si procede come nel sistema decimale, partendo dal rango '''0''' e determinando rango per rango la somma '''S'''. Ad ogni rango '''i''' si determina:<br/>
 
-la somma modulo 2 di '''x<sub>i</sub>''', '''y<sub>i</sub>''' e del riporto '''r<sub>i</sub>''' ottenuto dal rango precedente, ottenendo il digit '''s<sub>i</sub>''' della somma '''S'''.<br/>
Si cerca '''S=X+Y'''. A tale scopo si procede come nel sistema decimale, partendo dal rango '''0''' e determinando rango per rango la somma '''S'''. Ad ogni rango '''i''' si determina:
-il riporto '''r<sub>{i+1}</sub>''' da riportare sul rango '''i+1'''.<br/>
 
* la somma modulo 2 di '''x<sub>i</sub>''', '''y<sub>i</sub>''' e del riporto '''r<sub>i</sub>''' ottenuto dal rango precedente, ottenendo il digit '''s<sub>i</sub>''' della somma '''S'''.
* il riporto '''r<sub>{i+1}</sub>''' da riportare sul rango '''i+1'''.
 
Queste due operazioni sono riassunte nella tabella 2.3.
 
queste due operazioni sono riassunte nella tabella 2.3.
{| class="wikitable"
|-
Line 254 ⟶ 264:
|}
 
Esempio:<br/>
 
::::::::<math>R:\qquad 011111100</math><br/>
::::::::<math>XR:\qquad 101110110011111100</math><br/>
::::::::<math>YX:\qquad 000001011101110110</math><br/>
::::::::<math>Y:\qquad 000001011</math>
::::::::<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>''' ed il riporto '''r<sub>{i+1}</sub>''' per la sottrazione '''S=X-Y'''.
''Sottrazione'':<br/>
 
In modo analogo si ha la tabella 2.4, che fornisce per ogni rango, la sottrazione '''S<sub>i</sub>''' ed il riporto '''r<sub>{i+1}</sub>''' per la sottrazione '''S=X-Y'''.<br/>
{| class="wikitable"
|-
Line 328 ⟶ 339:
|}
 
:::::::<math>Tabella 2.4</math><br/>
 
Esempio:<br/>
:::::::<math>R:\qquad 01011000</math><br/>
:::::::<math>X:\qquad 10110111</math><br/>
:::::::<math>Y:\qquad 01011110</math><br/>
:::::::<math>S:\qquad 01011001</math><br/>
In pratica però si utilizza il metodo dei complementi che riconduce il calcolo della sottrazione a quello di addizione.<br/>
 
:::::::<math>R:\qquad 01011000</math>
:::::::<math>X:\qquad 10110111</math>
:::::::<math>Y:\qquad 01011110</math>
:::::::<math>S:\qquad 01011001</math>
 
In pratica però si utilizza il metodo dei complementi che riconduce il calcolo della sottrazione a quello di addizione.
''Complementazione'':<br/>
Si definisce complemento vero di un numero intero binario 0<x<2<sup>n</sup> la quantità:<br/>
::::::<math>C_{2^n}(X)=2^n-X</math><br/>
Esempio:<br/>
Sia il numero X=11001 di cinque cifre. Il suo complemento vero (detto anche [[w:Complemento a due|complemento a due]]) sarà:<br/>
::::::<math>C_{2^5}X=100000-11001=111</math><br/>
Si definisce invece [[w:complemento a uno|complemento ad '''1''']]di un numero intero binario '''0<X<2'n''' la quantità:<br/>
::::::<math>C_1(X)=2^n-X-1</math><br/>
Esempio:<br/>
 
''Complementazione''. Si definisce complemento vero di un numero intero binario 0<x<2<sup>n</sup> la quantità:
sia '''X'''=11001: Il suo complemento ad '''1''' sarà:<br/>
 
:::::::<math>C_1(X)=1000000-11001=110</math><br/>
::::::<math>C_{2^n}(X)=2^n-X</math>
Nel sistema binario il complemento ad '''1''' di un numero può essere ottenuto direttamente scambiando nella rappresentazione del numero stesso gli '''1''' con gli '''0'''. Conoscendo il complemento ad '''1''' di un numero binario si può ottenere il complemento vero sommando un '''1''':<br/>
 
:::::::<math>C_{2^n}(X)=C_1(X)+1</math><br />
Esempio:
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 operazione di somma.<br />
 
Siano '''A''' e '''B''' due numeri tali che:<br />
Sia il numero X=11001 di cinque cifre. Il suo complemento vero (detto anche [[w:Complemento a due|complemento a due]]) sarà:
::::::<math>0\le A\le 2^n\qquad 0\le B\le 2^n</math><br />
 
allora:<br />
:::::::<math>\ 0\le |A-B|\le C_{2^n5}X=100000-11001=111</math><br />
 
Si possono presentare due casi:<br />
Si definisce invece [[w:complemento a uno|complemento ad '''1''']]di un numero intero binario '''0<X<2'n''' la quantità:
a) per '''A-B≥0''' si ha:<br />
 
:::::::<math>A-B=|A-B|_{2^n}=|a-B+2^n|_{2^n}=|A+(2^n-B)|_{2^n}</math><br />
::::::<math>C_1(X)=2^n-X-1</math>
b) per '''A-B ≤0''' si ha:<br />
Esempio:
 
sia '''X'''=11001: Il suo complemento ad '''1''' sarà:
 
:::::::<math>C_1(X)=1000000-11001=110</math>
 
Nel sistema binario il complemento ad '''1''' di un numero può essere ottenuto direttamente scambiando nella rappresentazione del numero stesso gli '''1''' con gli '''0'''. Conoscendo il complemento ad '''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 operazione di somma.
 
Siano '''A''' e '''B''' due numeri tali che:
 
::::::<math>0\le A\le 2^n\qquad 0\le B\le 2^n</math>
 
allora:
 
:::::::<math>\ 0\le |A-B|\le 2^n</math>
 
Si possono presentare due casi:
 
a) per '''A-B≥0''' si ha:
 
:::::::<math>A-B=|A-B|_{2^n}=|a-B+2^n|_{2^n}=|A+(2^n-B)|_{2^n}</math>
 
b) per '''A-B ≤0''' si ha:
:::::::<math>A-B=2^n-|A-B|=|A-B|_{2^n}</math>
Per distinguere tra i due casi è sufficiente esaminare la posizione '''n''' nella operazione '''A+C<sub>2<sup>n</sup></sub>(B)''': infatti se '''A+C<sub>2<sup>n</sup></sub>(B)≥2<sup>n</sup>''' nella n-esima posizione del risultato comparirà un '''1''' (caso a) e quindi il residuo modulo '''2<sup>n</sup>''' fornisce la differenza stessa; se invece compare lo '''0''' l'operazione fornisce il valore complementato del valore assoluto del risultato (caso b).<br />
Esempio:<br />
::::::<math>A=111\qquad , \qquad B=10</math><br />
:::<math>A-B=\quad 111-</math><br />
::::::<math>\underline {....10}</math><br/>
::::::<math>..101</math>
 
Per distinguere tra i due casi è sufficiente esaminare la posizione '''n''' nella operazione '''A+C<sub>2<sup>n</sup></sub>(B)''': infatti se '''A+C<sub>2<sup>n</sup></sub>(B)≥2<sup>n</sup>''' nella n-esima posizione del risultato comparirà un '''1''' (caso a) e quindi il residuo modulo '''2<sup>n</sup>''' fornisce la differenza stessa; se invece compare lo '''0''' l'operazione fornisce il valore complementato del valore assoluto del risultato (caso b).
 
Esempio:
 
::::::<math>A=111\qquad , \qquad B=10</math>
:::<math>A-B=\quad 111-</math>
::::::<math>\underline {....10}</math>
::::::<math>..101</math>
 
=== Moltiplicazione e divisione in binario ===
*''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 ad ogni passo quest'ultima di un rango verso sinistra:<br/>
Esempio<br/>
::::::::<math>10111</math><br/>
::::::::<math>\underline {1101}</math><br/>
::::::::<math>10111</math><br />
:::::::<math>..10111</math><br />
:::::::<math>10111</math><br />
::::::<math>....100101011</math>
 
 
* ''Divisione''- Il metodo di base consiste nel sottrarre , come nel sistema decimale, il divisore moltiplicato per il solo fattore possibile e cioè '''1'''.<br/>
 
''Esempio:''
 
:::::<math>100101100\qquad |\underline {1101}=\quad 10111</math><br/>
:::::<math>..100101100\qquad |\underline {1101}=\quad 10111</math><br/>
:::::<math>0010111..1101</math><br/>
:::::<math>......11010010111</math><br />
:::::<math>....010100..1101</math><br />
:::::<math>........1101010100</math><br />
:::::<math>......001110..1101</math><br />
:::::<math>..........1101001110</math><br />
:::::<math>..........1101</math>
:::::<math>..........0001</math>
 
Line 397 ⟶ 429:
 
=== Sistemi con base 2<sup>p (p≥1)</sup> ===
Per '''p=1''' si ha il binario puro. Per '''p>1''' si hanno dei sistemi (p=3 ottale, p=4 esadecimale) che vengono spesso utilizzati come notazioni abbreviate per il binario puro, sia per facilitare la lettura agli operatori, sia per certi calcoli. Le conversioni dalla base'''2''' alla base '''2<sup>p</sup>''' e viceversa si riconducono a dei semplici raggruppamenti di termini. Consideriamo dei numeri interri: pur di aggiungere il necessario numero di zeri a sinistra di un numero binario, si può sempre scrivere:<br />
 
:::::::<math>N=X_k X_{k-1}......X_0</math><br />
:::::::<math>N=X_k X_{k-1}......X_0</math>
con<br />
 
::::::<math>X_i=X_{8i+1)p-1}...X_{(i+1)p-1}.....X_{ip}</math><br />
con
:::::::::::<math>(i=0,1...k)\qquad (l=1...p)</math><br />
 
cioè raggruppando le cifre binarie a gruppi di '''p''' a partire da destra.br/>
::::::<math>X_i=X_{8i+1)p-1}...X_{(i+1)p-1}.....X_{ip}</math>
Segue che:<br/>
:::::::::::<math>N=\sum_{(i=0}^{i=,1...k}X_i)\qquad 2^{ip}=\sum_{i=0}^(il=k)X_i (2^1...p)^i</math><br/>
 
cioè raggruppando le cifre binarie a gruppi di '''p''' a partire da destra.
 
Segue che:
 
:::::<math>N=\sum_{i=0}^{i=k}X_i 2^{ip}=\sum_{i=0}^(i=k)X_i (2^p)^i</math>
 
I gruppi '''X<sub>i</sub>''' sono quindi in binario puro le rappresentazioni delle cifre di '''N''' nel sistema a base '''2<sup>p</sup>'''.<br/>
Inversamente , dato un numero '''N''' in un sistema di base '''2<sup>p</sup>''', sarà sufficiente rappresentare ogni cifra in binario per avere il numero '''N''' in binario puro.<br/>
''Esempio'': codice ottale<br/>
::::::<math>N_2=\qquad 001\qquad 011\qquad 101</math><br/>
::::::<math>N_8=\qquad ..1\qquad ...3\qquad ....5</math><br/>
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).
 
''Esempio'': codice ottale
 
::::::<math>N_2=\qquad 001\qquad 011\qquad 101</math>
::::::<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 ad un altro ==