Capitolo 2.   Aritmetica elementare

La natura binaria degli elaboratori elettronici richiede la conoscenza di alcuni concetti fondamentali per la rappresentazione e il trattamento dei valori numerici.

2.1   Sistemi di numerazione

I sistemi di numerazione più comuni sono di tipo posizionale, definiti in tal modo perché la posizione in cui appaiono le cifre ha significato. I sistemi di numerazione posizionali si distinguono per la base di numerazione.

2.1.1   Sistema decimale

Il sistema di numerazione decimale è tale perché utilizza dieci simboli, pertanto è un sistema in base dieci. Trattandosi di un sistema di numerazione posizionale, le cifre numeriche, da «0» a «9», vanno considerate secondo la collocazione relativa tra di loro.

A titolo di esempio si può prendere il numero 745, che eventualmente va rappresentato in modo preciso come 74510: secondo l'esperienza comune si comprende che si tratta di settecento, più quaranta, più cinque, ovvero, settecentoquarantacinque. Si arriva a questo valore sapendo che la prima cifra a destra rappresenta delle unità (cinque unità), la seconda cifra a partire da destra rappresenta delle decine (quattro decine), la terza cifra a partire da destra rappresenta delle centinaia (sette centinaia).

Figura 2.1. Esempio di scomposizione di un numero in base dieci.

745 in base dieci

Figura 2.2. Scomposizione di un numero in base dieci.

745 in base dieci

Tabella 2.3. Tabellina dell'addizione con i numeri in base dieci.

+012345678910
0012345678910
11234567891011
223456789101112
3345678910111213
44567891011121314
556789101112131415
6678910111213141516
77891011121314151617
889101112131415161718
9910111213141516171819
101011121314151617181920

Tabella 2.4. Tabellina della moltiplicazione con i numeri in base dieci.

×012345678910
000000000000
1012345678910
202468101214161820
3036912151821242730
40481216202428323640
505101520253035404550
606121824303642485460
707142128354249566370
808162432404856647280
909182736455463728190
100102030405060708090100

2.1.2   Sistema binario

Il sistema di numerazione binario (in base due), utilizza due simboli: «0» e «1».

Figura 2.5. Esempio di scomposizione di un numero in base due.

10010_(2)

Figura 2.6. Scomposizione di un numero in base due.

10010_(2)

Tabella 2.7. Tabellina dell'addizione con i numeri in base due.

+0212102
020212102
1212102112
1021021121002

Figura 2.8. Esempio di somma in base due.

somma binaria

Tabella 2.9. Tabellina della moltiplicazione con i numeri in base due.

×0212102
02020202
120212102
102021021002

Figura 2.10. Esempio di moltiplicazione in base due.

moltiplicazione binaria

2.1.3   Sistema ottale

Il sistema di numerazione ottale (in base otto), utilizza otto simboli: da «0» a «7».

Figura 2.11. Esempio di scomposizione di un numero in base otto.

354_(8)

Figura 2.12. Scomposizione di un numero in base otto.

354_(8)

Tabella 2.13. Tabellina dell'addizione con i numeri in base otto.

+0818283848586878108
080818283848586878108
1818283848586878108118
28283848586878108118128
383848586878108118128138
4848586878108118128138148
58586878108118128138148158
686878108118128138148158168
7878108118128138148158168178
108108118128138148158168178208

Figura 2.14. Esempio di addizione in base otto.

somma ottale

Tabella 2.15. Tabellina della moltiplicazione con i numeri in base otto.

×0818283848586878108
08080808080808080808
180818283848586878108
2808284868108128148168208
38083868118148178228258308
480848108148208248308348408
580858128178248318368438508
680868148228308368448528608
780878168258348438528618708
108081082083084085086087081008

Figura 2.16. Esempio di moltiplicazione con i numeri in base otto.

moltiplicazione ottale

2.1.4   Sistema esadecimale

Il sistema di numerazione esadecimale (in base sedici), utilizza sedici simboli: le cifre numeriche da «0» a «9» e le lettere (maiuscole) dalla «A» alla «F».

Figura 2.17. Esempio di scomposizione di un numero in base sedici.

9C8_(16)

Figura 2.18. Scomposizione di un numero in base sedici.

9C8_(16)

Tabella 2.19. Tabellina dell'addizione con i numeri in base sedici.

+016116216316416516616716816916A16B16C16D16E16F161016
016016116216316416516616716816916A16B16C16D16E16F161016
116116216316416516616716816916A16B16C16D16E16F1610161116
216216316416516616716816916A16B16C16D16E16F16101611161216
316316416516616716816916A16B16C16D16E16F161016111612161316
416416516616716816916A16B16C16D16E16F1610161116121613161416
516516616716816916A16B16C16D16E16F16101611161216131614161516
616616716816916A16B16C16D16E16F161016111612161316141615161616
716716816916A16B16C16D16E16F1610161116121613161416151616161716
816816916A16B16C16D16E16F16101611161216131614161516161617161816
916916A16B16C16D16E16F161016111612161316141615161616171618161916
A16A16B16C16D16E16F1610161116121613161416151616161716181619161A16
B16B16C16D16E16F1610161116121613161416151616161716181619161A161B16
C16C16D16E16F1610161116121613161416151616161716181619161A161B161C16
D16D16E16F1610161116121613161416151616161716181619161A161B161C161D16
E16E16F1610161116121613161416151616161716181619161A161B161C161D161E16
F16F1610161116121613161416151616161716181619161A161B161C161D161E161F16
101610161116121613161416151616161716181619161A161B161C161D161E161F162016

Figura 2.20. Esempio di un'addizione con i numeri in base sedici.

somma esadecimale

Tabella 2.21. Tabellina della moltiplicazione con i numeri in base sedici.

×016116216316416516616716816916A16B16C16D16E16F161016
016016016016016016016016016016016016016016016016016016
116016116216316416516616716816916A16B16C16D16E16F161016
216016216416616816A16C16E16101612161416161618161A161C161E162016
316016316616916C16F161216151618161B161E162116241627162A162D163016
416016416816C161016141618161C162016241628162C163016341638163C164016
516016516A16F16141619161E16231628162D16321637163C16411646164B165016
616016616C16121618161E1624162A16301636163C16421648164E1654165A166016
716016716E1615161C1623162A16311638163F1646164D1654165B16621669167016
816016816101618162016281630163816401648165016581660166816701678168016
91601691612161B1624162D1636163F16481651165A1663166C1675167E1687169016
A16016A1614161E16281632163C16461650165A1664166E16781682168C169616A016
B16016B16161621162C16371642164D16581663166E16791684168F169A16A516B016
C16016C161816241630163C164816541660166C167816841690169C16A816B416C016
D16016D161A162716341641164E165B166816751682168F169C16A916B616C316D016
E16016E161C162A16381646165416621670167E168C169A16A816B616C416D216E016
F16016F161E162D163C164B165A166916781687169616A516B416C316D216E116F016
1016016101620163016401650166016701680169016A016B016C016D016E016F01610016

Figura 2.22. Esempio di moltiplicazione con i numeri in base sedici.

moltiplicazione esadecimale

2.2   Conversioni numeriche di valori interi

L'uso dell'elaboratore può richiedere la capacità di convertire valori numerici espressi in diversi sistemi di numerazione; per la precisione può essere necessario saper trasformare un numero in una base differente. Prima di poter convertire un numero in una base di numerazione differente, occorre comprendere il senso della numerazione decimale, ovvero di quella standard (per gli esseri umani).

Un numero espresso in base dieci, viene interpretato sommando il valore di ogni singola cifra moltiplicando per 10n (n rappresenta la cifra n-esima, a partire da zero). Per esempio, 12 345 si può esprimere come 5×100 + 4×101 + 3×102 + 2×103 + 1×104. Nello stesso modo, si può scomporre un numero per esprimerlo in base dieci dividendo ripetutamente il numero per la base, recuperando ogni volta il resto della divisione. Per esempio, il valore 12 345 (che ovviamente è già espresso in base dieci), si scompone nel modo seguente: 12 345/10=1 234 con il resto di cinque; 1 234/10=123 con il resto di quattro; 123/10=12 con il resto di tre; 12/10=1 con il resto di due; 1/10=0 con il resto di uno (quando si ottiene un quoziente nullo, la conversione è terminata). Ecco che la sequenza dei resti dà il numero espresso in base dieci: 12 345.

Riquadro 2.23. Il resto della divisione.

Per riuscire a convertire un numero intero da una base di numerazione a un'altra, occorre sapere calcolare il resto della divisione.

Si immagini di avere un sacchetto di nove palline uguali, da dividere equamente fra quattro amici. Per calcolare quante palline spettano a ognuno, si esegue la divisione seguente:

9/4 = 2,25

Il risultato intero della divisione è due, pertanto ognuno dei quattro amici può avere due palline e il resto della divisione è costituito dalle palline che non possono essere suddivise. Come si comprende facilmente, il resto è di una pallina:

9 - (2×4) = 1

2.2.1   Numerazione ottale

La numerazione ottale, ovvero in base otto, si avvale di otto cifre per rappresentare i valori: da zero a sette. La tecnica di conversione di un numero ottale in un numero decimale è la stessa mostrata a titolo esemplificativo per il sistema decimale, con la differenza che la base di numerazione è otto. Per esempio, per interpretare il numero ottale 123458, si procede come segue: 5×80 + 4×81 + 3×82 + 2×83 + 1×84. Pertanto, lo stesso numero si potrebbe rappresentare in base dieci come 5 349. Al contrario, per convertire il numero 5 349 (qui espresso in base 10), si può procedere nel modo seguente: 5 349/8=668 con il resto di cinque; 668/8=83 con il resto di quattro; 83/8=10 con il resto di tre; 10/8=1 con il resto di due; 1/8=0 con il resto di uno. Ecco che così si riottiene il numero ottale 123458.

Figura 2.24. Conversione in base otto.

da base otto a base dieci

Figura 2.25. Calcolo del valore corrispondente di un numero espresso in base otto.

da base otto a base dieci

2.2.2   Numerazione esadecimale

La numerazione esadecimale, ovvero in base sedici, funziona in modo analogo a quella ottale, con la differenza che si avvale di 16 cifre per rappresentare i valori, per cui si usano le cifre numeriche da zero a nove, più le lettere da «A» a «F» per i valori successivi. In pratica, la lettera «A» nelle unità corrisponde al numero 10 e la lettera «F» nelle unità corrisponde al numero 15.

La tecnica di conversione è la stessa già vista per il sistema ottale, tenendo conto della difficoltà ulteriore introdotta dalle lettere aggiuntive. Per esempio, per interpretare il numero esadecimale 19ADF16, si procede come segue: 15×160 + 13×161 + 10×162 + 9×163 + 1×164. Pertanto, lo stesso numero si potrebbe rappresentare in base dieci come 105 183. Al contrario, per convertire il numero 105 183 (qui espresso in base 10), si può procedere nel modo seguente: 105 183/16=6 573 con il resto di 15, ovvero F16; 6 573/16=410 con il resto di 13, ovvero D16; 410/16=25 con il resto di 10, ovvero A16; 25/16=1 con il resto di nove; 1/16=0 con il resto di uno. Ecco che così si riottiene il numero esadecimale 19ADF16.

Figura 2.26. Conversione in base sedici.

da base dieci a base sedici

Figura 2.27. Calcolo del valore corrispondente di un numero espresso in base sedici.

da base sedici a base dieci

2.2.3   Numerazione binaria

La numerazione binaria, ovvero in base due, si avvale di sole due cifre per rappresentare i valori: zero e uno. Si tratta evidentemente di un esempio limite di rappresentazione di valori, dal momento che utilizza il minor numero di cifre. Questo fatto semplifica in pratica la conversione.

Seguendo la logica degli esempi già mostrati, si analizza brevemente la conversione del numero binario 11002: 0×20 + 0×21 + 1×22 + 1×23. Pertanto, lo stesso numero si potrebbe rappresentare come 12 secondo il sistema standard. Al contrario, per convertire il numero 12, si può procedere nel modo seguente: 12/2=6 con il resto di zero; 6/2=3 con il resto di zero; 3/2=1 con il resto di uno; 1/2=0 con il resto di uno. Ecco che così si riottiene il numero binario 11002.

Figura 2.28. Conversione da base dieci a base due e viceversa.

da base dieci a base due e viceversa

Si può convertire un numero in binario, in modo più semplice, se si costruisce una tabellina simile a quella seguente:

tabellina

I valori indicati sopra ogni casellina sono la sequenza delle potenze di due: 20, 21, 22,... 2n.

Se si vuole convertire un numero binario in base dieci, basta disporre le sue cifre dentro le caselline, allineato a destra, moltiplicando ogni singola cifra per il valore che gli appare sopra, sommando poi ciò che si ottiene. Per esempio:

tabellina

Per trovare il corrispondente binario di un numero in base 10, basta sottrarre sempre il valore più grande possibile. Supponendo di voler convertire il numero 123 in binario, si possono sottrarre i valori: 64, 32, 16, 8, 2 e 1:

tabellina

2.2.4   Conversione tra ottale, esadecimale e binario

I sistemi di numerazione ottale ed esadecimale hanno la proprietà di convertirsi in modo facile in binario e viceversa. Infatti, una cifra ottale richiede esattamente tre cifre binarie per la sua rappresentazione, mentre una cifra esadecimale richiede quattro cifre binarie per la sua rappresentazione. Per esempio, il numero ottale 1238 si converte facilmente in 0010100112; inoltre, il numero esadecimale 3C16 si converte facilmente in 001111002.

Figura 2.32. Conversione tra la numerazione ottale e numerazione binaria.

da base otto a base due e viceversa

In pratica, è sufficiente convertire ogni cifra ottale o esadecimale nel valore corrispondente in binario. Quindi, sempre nel caso di 1238, si ottengono 0012, 0102 e 0112, che basta attaccare come già è stato mostrato. Nello stesso modo si procede nel caso di 3C16, che forma rispettivamente 00112 e 11002.

Figura 2.33. Conversione tra la numerazione esadecimale e numerazione binaria.

da base sedici a base due e viceversa

È evidente che risulta facilitata ugualmente la conversione da binario a ottale o da binario a esadecimale.

Figura 2.34. Riassunto della conversione tra binario-ottale e binario-esadecimale.

riassunto della conversione tra binario-ottale e binario-esadecimale

Tabella 2.35. Conversione rapida binario-ottale e binario-esadecimale.

binario ottale binario esadecimale binario esadecimale
000 0 0000 0 1000 8
001 1 0001 1 1001 9
010 2 0010 2 1010 A
011 3 0011 3 1011 B
100 4 0100 4 1100 C
101 5 0101 5 1101 D
110 6 0110 6 1110 E
111 7 0111 7 1111 F

Figura 2.36. Tabellina di conversione binario-decimale fino a 32 bit.

tabella per la conversione da base 10 a base 2 tabella per la conversione da base 10 a base 2 tabella per la conversione da base 10 a base 2 tabella per la conversione da base 10 a base 2

2.3   Conversioni numeriche di valori non interi

La conversione di valori non interi in basi di numerazione differenti, richiede un procedimento più complesso, dove si convertono, separatamente, la parte intera e la parte restante.

Il procedimento di scomposizione di un numero che contenga delle cifre dopo la parte intera, si svolge in modo simile a quello di un numero intero, con la differenza che le cifre dopo la parte intera vanno moltiplicate per la base elevata a una potenza negativa. Per esempio, il numero 12,34510 si può esprimere come 1×101 + 2×100 + 3×10-1 + 4×10-2 + 5×10-3.

2.3.1   Conversione da base 10 ad altre basi

Come già accennato la conversione di un numero in un'altra base procede in due fasi: una per la parte intera, l'altra per la parte restante, unendo poi i due valori trovati. Per comprendere il meccanismo conviene simulare una conversione dalla base 10 alla stessa base 10, con un esempio: 12,345.

Per la parte intera, si procede come al solito, dividendo per la base di numerazione del numero da trovare e raccogliendo i resti; per la parte rimanente, il procedimento richiede invece di moltiplicare il valore per la base di destinazione e raccogliere le cifre intere trovate. Si osservi la figura successiva che rappresenta il procedimento.

Figura 2.37. Conversione da base 10 a base 10.

da base dieci a base dieci

Quello che si deve osservare dalla figura è che l'ordine delle cifre cambia nelle due fasi del calcolo. Nelle figure successive si vedono altri esempi di conversione nelle altre basi di numerazione comuni.

Figura 2.38. Conversione da base 10 a base 16.

da base dieci a base sedici

Figura 2.39. Conversione da base 10 a base 8.

da base dieci a base otto

Figura 2.40. Conversione da base 10 a base 2.

da base dieci a base due

2.3.2   Conversione a base 10 da altre basi

Per convertire un numero da una base di numerazione qualunque alla base 10, è necessario attribuire a ogni cifra il valore corrispondente, da sommare poi per ottenere il valore complessivo. Nelle figure successive si vedono gli esempi relativi alle basi di numerazione più comuni.

Figura 2.41. Conversione da base 16 a base 10.

da base sedici a base dieci

Figura 2.42. Conversione da base 8 a base 10.

da base otto a base dieci

Figura 2.43. Conversione da base 2 a base 10.

da base due a base dieci

2.3.3   Conversione tra ottale, esadecimale e binario

Per quanto riguarda la conversione tra sistemi di numerazione ottale, esadecimale e binario, vale lo stesso principio dei numeri interi, con la differenza che occorre rispettare la separazione della parte intera da quella decimale. L'esempio della figura successiva dovrebbe essere abbastanza chiaro.

Figura 2.44. Conversione tra binario-ottale e binario-esadecimale.

conversione tra binario-ottale e binario-esadecimale

2.4   Le operazioni elementari e il sistema binario

Può essere utile conoscere alcuni concetti legati ai calcoli più semplici, specie quando applicati al sistema binario. Nelle sezioni successive si riepilogano i procedimenti per eseguire le «quattro operazioni» con il sistema binario.

2.4.1   Complemento alla base di numerazione

Dato un numero n, espresso in base b, con k cifre, il complemento alla base è costituito da bk-n.

Per esempio, il complemento alla base del numero 00 123 456 789 (espresso in base dieci utilizzando 11 cifre) è 99 876 543 211:

complemento alla base di 00123456789

Dall'esempio si deve osservare che la quantità di cifre utilizzata è determinante nel calcolo del complemento, infatti, il complemento alla base dello stesso numero, usando però solo nove cifre (123 456 789) è invece 876 543 211:

complemento alla base di 123456789

In modo analogo si procede con i valori aventi una base diversa; per esempio, il complemento alla base del numero binario 001100112, composto da otto cifre, è pari a 110011012:

complemento alla base di 00110011_(2)

Il calcolo del complemento alla base, nel sistema binario, avviene in modo molto semplice, se si trasforma in questo modo:

complemento alla base di 00110011_(2)

In pratica, si prende un numero composto da una quantità di cifre a uno, pari alla stessa quantità di cifre del numero di partenza; quindi si esegue la sottrazione, poi si aggiunge il valore uno al risultato finale. Si osservi però cosa accade con una situazione leggermente differente, per il calcolo del complemento alla base di 00110011002:

complemento alla base di 0011001100_(2)

Per eseguire una sottrazione, si può calcolare il complemento alla base del sottraendo (il valore da sottrarre), sommandolo poi al valore di partenza, trascurando il riporto eventuale. Per esempio, volendo sottrarre da 1 757 il valore 758, si può calcolare il complemento alla base di 0 758 (usando la stessa quantità di cifre dell'altro valore), per poi sommarla. Il complemento alla base di 0 758 è 9 242:

complemento alla base di 0758

Invece di eseguire la sottrazione, si somma il valore ottenuto a quello di partenza, ignorando il riporto:

1757+9242-10000

Infatti: 1 757-758=999.

2.4.2   Complemento a uno e complemento a due

Quando si fa riferimento a numeri in base due, il complemento alla base è più noto come «complemento a due» (che evidentemente è la stessa cosa). D'altro canto, il complemento a uno è ciò che è già stato descritto con l'esempio seguente, dove si ottiene a partire dal numero 00110011002:

complemento a uno di 0011001100_(2)

Si comprende intuitivamente che il complemento a uno si ottiene semplicemente invertendo le cifre binarie:

complemento a uno di 0011001100_(2)

Pertanto, il complemento a due di un numero binario si ottiene facilmente invertendo le cifre del numero di partenza e aggiungendo una unità al risultato.

2.4.3   Addizione binaria

L'addizione binaria avviene in modo analogo a quella del sistema decimale, con la differenza che si utilizzano soltanto due cifre numeriche: 0 e 1. Pertanto, si possono presentare solo i casi seguenti:

somma binaria

Se si aggiunge un riporto alla somma tra due cifre binarie, si anno questi altri casi:

somma binaria con riporto

Segue l'esempio di una somma tra due numeri in base due:

somma in base due

2.4.4   Sottrazione binaria

La sottrazione binaria può essere eseguita nello stesso modo di quella che si utilizza nel sistema decimale. Come avviene nel sistema decimale, quando una cifra del minuendo (il numero di partenza) è minore della cifra corrispondente nel sottraendo (il numero da sottrarre), si prende a prestito una unità dalla cifra precedente (a sinistra), che così si somma al minuendo con il valore della base di numerazione. L'esempio seguente mostra una sottrazione con due numeri binari:

sottrazione binaria

Generalmente, la sottrazione binaria viene eseguita sommando il complemento alla base del sottraendo. Il complemento alla base di 001100112 con otto cifre è 110011012:

complemento alla base di 00110011_(2)

Pertanto, la sottrazione originale diventa una somma, dove si trascura il riporto:

sottrazione attraverso la somma

2.4.5   Moltiplicazione binaria

La moltiplicazione binaria si esegue in modo analogo a quella per il sistema decimale, con il vantaggio che è sufficiente sommare il moltiplicando, facendolo scorrere verso sinistra, in base al valore del moltiplicatore. Naturalmente, lo spostamento di un valore binario verso sinistra di n posizioni, corrisponde a moltiplicarlo per 2n. Si osservi l'esempio seguente dove si moltiplica 100110012 per 10112:

moltiplicazione binaria

2.4.6   Divisione binaria

La divisione binaria si esegue in modo analogo al procedimento per i valori in base dieci. Si osservi l'esempio seguente, dove si divide il numero 101102 (2210) per 1002 (410):

divisione binaria

In questo caso il risultato è 1012 (510), con il resto di 102 (210); ovvero 101,12 (5,510).

Intuitivamente si comprende che: si prende il divisore, senza zeri anteriori, lo si fa scorrere a sinistra in modo da trovarsi allineato inizialmente con il dividendo; se la sottrazione può avere luogo, si scrive la cifra 12 nel risultato; si continua con gli scorrimenti e le sottrazioni; al termine, il valore residuo è il resto della divisione intera.

2.5   Riferimenti

«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net