[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 4.   Conversioni numeriche

L'uso dell'elaboratore può richiedere la capacità di convertire valori numerici espressi in diversi sistemi di numerazione; per la precisione si può richiedere una trasformazione 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 10, 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 10 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 10), 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 10: 12 345.

4.1   Numerazione ottale

La numerazione ottale, ovvero in base otto, si avvale di otto cifre per rappresentare i valori: da zero e 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 10 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 4.1. Conversione in base otto.

32485 in base 10 --> | 32485/8 = 4060 con resto di 5
                     |  4060/8 =  507 con resto di 4
                     |   507/8 =   63 con resto di 3
                     |    63/8 =    7 con resto di 7
                     |     7/8 =    0 con resto di 7
                     |
                     `---------------------------> 77345 in base 8

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

77345 in base 8 --> |    5*8^0 =     5
                    |    4*8^1 =    32
                    |    3*8^2 =   192
                    |    7*8^3 =  3584
                    |    7*8^4 = 28672
                    |
                    `-- totale = 32485 in base 10

4.2   Numerazione esadecimale

La numerazione esadecimale, ovvero in base 16, 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 10 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 4.3. Conversione in base 16.

32485 in base 10 --> | 32485/16 = 2030 con resto di  5 --> 5
                     |  2030/16 =  126 con resto di 14 --> E
                     |   126/16 =    7 con resto di 14 --> E
                     |     7/16 =    0 con resto di  7 --> 7
                     |
                     `-----------------------------------> 7EE5 in base 16

Figura 4.4. Calcolo del valore corrispondente di un numero espresso in base 16.

7EE5 in base 16 --> |        5*16^0 =     5
                    | E --> 14*16^1 =   224
                    | E --> 14*16^2 =  3584
                    |        7*16^3 = 28672
                    |
                    `------- totale = 32485 in base 10

4.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 4.5. Conversione in base due.

32485 in base 10 --> | 32485/2 = 16242 con resto di 1
                     | 16242/2 =  8121 con resto di 0
                     |  8121/2 =  4060 con resto di 1
                     |  4060/2 =  2030 con resto di 0
                     |  2030/2 =  1015 con resto di 0
                     |  1015/2 =   507 con resto di 1
                     |   507/2 =   253 con resto di 1
                     |   253/2 =   126 con resto di 1
                     |   126/2 =    63 con resto di 0
                     |    63/2 =    31 con resto di 1
                     |    31/2 =    15 con resto di 1
                     |    15/2 =     7 con resto di 1
                     |     7/2 =     3 con resto di 1
                     |     3/2 =     1 con resto di 1
                     |     1/2 =     0 con resto di 1
                     |
                     `---------------------------> 111111011100101 in base 2

Figura 4.6. Calcolo del valore corrispondente di un numero espresso in base due.

111111011100101 in base 2 --> |    1*2^0  =     1
                              |    0*2^1  =     0
                              |    1*2^2  =     4
                              |    0*2^3  =     0
                              |    0*2^4  =     0
                              |    1*2^5  =    32
                              |    1*2^6  =    64
                              |    1*2^7  =   128
                              |    0*2^8  =     0
                              |    1*2^9  =   512
                              |    1*2^10 =  1024
                              |    1*2^11 =  2048
                              |    1*2^12 =  4096
                              |    1*2^13 =  8192
                              |    1*2^14 = 16384
                              |
                              `--- totale = 32485 in base 10

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

16384 8192 4096 2048 1024  512  256  128  64   32   16    8    4    2    1
.--------------------------------------------------------------------------.
|    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |
`--------------------------------------------------------------------------'

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 10, 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:

16384 8192 4096 2048 1024  512  256  128  64   32   16    8    4    2    1
.--------------------------------------------------------------------------.
|    |    |    |    |    |    |    |    |    |    |    |  1 |  0 |  1 |  0 |
`--------------------------------------------------------------------------'
                                                          8 +  0 +  2 +  0 = 10

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:

16384 8192 4096 2048 1024  512  256  128  64   32   16    8    4    2    1
.--------------------------------------------------------------------------.
|    |    |    |    |    |    |    |    |  1 |  1 |  1 |  1 |  0 |  1 |  1 |
`--------------------------------------------------------------------------'
                                          64 + 32 + 16 +  8 +  4 +  2 +  1 = 123

4.3.1   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 4.10. Conversione tra la numerazione ottale e numerazione binaria.

123 in base otto                        001010011 in base due
|||                                     \ /\ /\ /
||`------> 011                           |  |  |
||                                       |  |  `----> 3
|`----> 010                              |  |
|                                        |  `------> 2
`--> 001                                 |
                                         `--------> 1

=    001010011 in base due                          123 in base otto

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 4.11. Conversione tra la numerazione esadecimale e numerazione binaria.

3C in base sedici                       00111100 in base due
||                                      \  /\  /
||                                        |   | 
|`-----> 1100                             |   |
|                                         |   `-----> C
`--> 0011                                 |
                                          `--------> 3

=    00111100 in base due                            3C in base sedici

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

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

                    111111011100101  in base due
                    \ /\ /\ /\ /\ /
                     7  7  3  4  5   in base otto
                    / \/ \/ \/ \/ \
                   0111111011100101  in base due
                   \  /\  /\  /\  /
                     7  14  14   5
                     7   E   E   5   in base sedici
                   /  \/  \/  \/  \
                   0111111011100101  in base due

Tabella 4.1. 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
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome conversioni_numeriche.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]