I sistemi di numerazione
Breve storia dei sistemi di numerazione.
Probabilmente l’uomo primitivo per contare gli animali e gli oggetti usava le
dieci dita delle mani e, una volta abbassate tutte, tracciava a terra o su una pietra un
segno che, chiaramente, rappresentava una decina. Nasceva così il sistema di
numerazione decimale. Se usava le dita di una sola mano, ogni segno rappresentava
una cinquina e, di conseguenza, il sistema di numerazione era il quinario. Se oltre alle
dita delle mani usava anche quelle dei piedi, al segno da lui tracciato corrispondeva
una ventina e, di conseguenza, il sistema di numerazione era il bidecimale o
vigesimale, usato dai Celti e dai Maya. Infine, se usava solo le due mani, senza tener
conto delle dita, per contare le coppie, veniva fuori il sistema binario.
In seguito, nascendo l’esigenza dei calcoli, venivano usati gli abachi, tavolette
divise in colonne su cui veniva stesa cera o sabbia (abaq in ebraico significa polvere)
sulle quali si incidevano i numeri oppure si mettevano i sassolini (dal latino calculi).
Gli Indiani modificarono gli abachi, introducendo, fra l’altro, un simbolo per indicare
il vuoto. A quest’ultimo simbolo, che indicava la colonna priva di numeri nell’abaco,
venne assegnato il nome di Sifr (deformato in seguito in zephyrum, poi in severo e
quindi in zero), dallo studioso arabo Al-Khuwarismi, da cui deriva il termine
algoritmo, (procedimento di calcolo) in un suo libro che inizia con le parole kitab-algiabr , da cui il termine algebra.
Sistemi di numerazione
Un sistema di numerazione è un insieme finito di simboli e di regole che fanno
corrispondere un significato numerico univoco ad ogni scrittura costruita con dei
simboli o cifre, con delle regole assegnate che esprimono le modalità per
rappresentare il numero come sequenze di cifre e con delle relazioni che permettono
di effettuare le operazioni tra i numeri.
1
Il numero dei simboli presente in un sistema di numerazione è detto base del sistema.
Normalmente vengono usati sistemi di numerazione a base fissa con rappresentazione
posizionale in cui, cioè, le cifre assumono un valore ben preciso a seconda della
posizione occupata nel numero. Per esempio nel sistema decimale i due numeri 547 e
754, pur essendo formati dalle stesse cifre hanno valore diverso, infatti:
547 = 5 × 10 2 + 4 × 101 + 7 × 10 0
754 = 7 × 10 2 + 5 × 101 + 4 × 10 0
e
come si vede, il valore delle loro cifre dipende dal posto da esse occupato all’interno
del numero.
In generale, un numero a base fissa B, con B>1, è costituito da un insieme ordinato di
B simboli che rappresentano i numeri a partire da zero fino al numero precedente la
base. In tale base ogni numero > B viene rappresentato con una sequenza di simboli
AnAn-1……..A1A0 a cui viene attribuito il seguente significato:
AnAn-1……..A1A0 = AnBn + An-1Bn-1 + .......... + A1B1 + A0B0
(1)
In cui An; An-1; ……. A1; A0 sono elementi appartenenti all’insieme dei B simboli.
Se il numero di uno viene rappresentato nel seguente modo:
0, A0A1A2……..An-1 = A0B-1 + A1B-2 +.........+ An-1B-n.
(2)
La base B viene rappresentata da 10, che nel sistema decimale rappresenta il dieci.
In generale l’espressione polinomiale che rappresenta il numero N in un sistema di
numerazione posizionale a base fissa è:
N=
n
åA B
i
i =- m
i
;
A i £ B - 1 dove
-m £ i £ n
In informatica i sistemi di numerazione a base fissa più usati sono il decimale, il
binario, l’ottale e l’esadecimale.
Il sistema di numerazione decimale.
Il sistema di numerazione decimale è un sistema di tipo posizionale ed è
costituito da un insieme ordinato di dieci simboli 0; 1; 2; 3; 4; 5; 6; 7; 8; 9. Poiché è
un sistema posizionale ogni numero espresso in questo sistema è composto da più
2
cifre affiancate ciascuna delle quali ha peso diverso a seconda della posizione che
occupa. Il peso di ciascuna cifra è espresso da una potenza che ha per base la base del
sistema, e nel nostro caso 10, e per esponente la posizione della cifra rispetto alla
prima cifra di destra che ha posizione 0. Quindi il valore associato a ciascuna cifra è
dato dal prodotto del peso per il numero della cifra e il valore associato al numero è
dato dalla somma del valore di ciascuna cifra.
Le regole che consentono di effettuare le addizioni aritmetiche fondamentali tra due
numeri quali l’addizione, la sottrazione, la divisione e la moltiplicazione li
conosciamo abbastanza bene, queste stesse regole valgono in qualsiasi sistema di
numerazione in quanto le operazioni aritmetiche sono invarianti rispetto alla base del
sistema di numerazione.
Il sistema di numerazione binario
Se il sistema di numerazione deve essere utilizzato in un calcolatore elettronico,
poiché in esso i circuiti che realizzano le operazioni sono circuiti digitali, descritti,
cioè, da segnali che possono assumere due solo stati distinti, è necessario che nel
sistema di numerazione utilizzato i simboli siano solo due e ciò richiede che la sua
base sia 2, cioè base minima. Si passa così al sistema di numerazione binario. Esso è
un sistema posizionale, ha base 2 e i suoi simboli sono 0 e 1. Questi due elementi
fondamentali della numerazione binaria vengono chiamati bit (binary digit). Spesso
si usano parole di 4 bit (nibble) o di 8 bit (byte).
Esempio:
1010
è 1 nibble
1101 1011 sono 2 nibble cioè 1byte
Sussiste la seguente relazione:
1 byte = 2 nibble = 8 bit
3
La cifra di peso inferiore, cioè quella più a destra, si chiama cifra meno significativa
LSB (Least Significant Bit) , mentre quella di peso maggiore, cioè quella più a
sinistra, cifra più significativa MSB (Most Significant Bit).
Il sistema di numerazione ottale
Il sistema di numerazione a base 8 od ottale è un sistema di tipo posizionale ed
è costituito da un insieme ordinato di otto simboli 0; 1; 2; 3; 4; 5; 6; 7.
Il sistema di numerazione esadecimale
Il sistema di numerazione a base 16 o esadecimale è un sistema di tipo
posizionale ed è costituito da un insieme ordinato di sedici simboli 0; 1; 2; 3; 4; 5; 6;
7; 8; 9; A; B; C; D; E; F quindi, come si vede, per la sua rappresentazione utilizza
caratteri alfanumerici.
Conversione di un numero da base B a base 10
Ricordando che un numero in base B è rappresentato da una sequenza di cifre
del tipo: AnAn-1……..A1A0
con 0 < Aj < B
e che il sistema di numerazione, oggetto del nostro studio, è di tipo posizionale, il
numero decimale N(10) può essere scritto come:
N(10) = AnBn + An-1Bn-1 + .......... + A1B1 + A0B0
Vediamo alcuni esempi:
Convertire in base 10 il numero 11010(2)
4
11010( 2 ) = 1 × 2 4 + 1 × 2 3 + 0 × 2 2 + 1 × 21 + 0 × 20 = 26(10)
Convertire in base 10 il numero10101(2)
10101 = 1 × 2 4 + 0 × 2 3 + 1 × 2 2 + 0 × 21 × 1 × 2 0 = 21(10)
Come si vede, dai due esempi riportati, se nel numero binario il bit meno
significativo è 0, il corrispondente numero decimale è pari se, invece, il bit meno
significativo è 1, il corrispondente numero decimale è dispari.
Convertire in base 10 il numero 467(8)
4 × 82 + 6 × 81 + 7 × 80 = 567 (10 )
Convertire in base 10 il numero A4C(16)
10 × 16 2 + 4 × 161 + 12 × 16 0 = 2636
Se il numero non è intero, bisogna tener conto della (1) e della (2).
Esempi:
Convertire in base 10 il numero 110,11(2)
1 × 2 2 + 1 × 21 + 0 × 2 0 + 1 × 2 -1 + 1 × 2 - 2 = 6 +
1 1 27
+ =
= 6,75
2 4
4
Convertire in base 10 il numero 146,72(8)
1 × 82 + 4 × 81 + 6 × 80 + 7 × 8 -1 + 2 × 8- 2 = 102 +
7 2 6586
+
=
= 102,90625(10)
8 64
64
5
Convertire in base 10 il numero 4C,1A(16)
4 × 161 + 12 × 16 0 + 1 × 16 -1 + 10 × 16 -2 = 76 +
1
10 19482 9471
+ 2 =
=
16 16
256
128
Conversione di un numero da base 10 a base B.
Se il numero decimale è intero positivo per convertirlo ad una base qualunque B si
usa il metodo delle divisioni successive cioè:
q
Si divide il numero decimale N10 per la base B;
q
Si otterrà un quoziente Q0 ed un resto R0. Il resto R0 sarà la cifra meno
significativa del numero cercato.
q
Si divide il quoziente Q0 ancora per B; si otterrà un nuovo quoziente Q1 e un
resto R1.
q
Questo procedimento verrà continuato finché Q non sarà zero.
A questo punto il numero in base B si ottiene posizionando ordinatamente i resti con
R0 cifra meno significativa e Rn cifra più significativa, cioè:
RnRn-1……..Rj………R2R1R0 (B)
Vediamo degli esempi:
Convertire 23(10) in base 2:
Dividendo Divisore Quoziente Resto
23
:2
11
1
11
:2
5
1
5
:2
2
1
2
:2
1
0
1
:2
0
1
Quindi si ottiene:
10111(2)
6
Convertire 327(10) in base 8
Dividendo Divisore Quoziente Resto
327
40
5
:8
:8
:8
40
5
0
7
0
5
Si ottiene, pertanto:
507(8)
Convertire 876(10) in base 16
Dividendo Divisore Quoziente Resto
876
54
3
:16
:16
:16
54
3
0
12
6
3
Si ottiene, quindi:
36C(16)
Tutto il discorso precedente vale, come abbiamo detto, solo se il numero decimale è
un numero intero positivo. Se il numero decimale da convertire è un numero
frazionario positivo minore di 1, per convertirlo in un numero in base B bisogna
eseguire i seguenti passi:
Ø Si moltiplica il numero in base 10 N(10) per la base B, si otterrà un numero M0.
La parte intera di questo numero I0 sarà il numero più significativo dopo la
virgola del numero cercato.
Ø Si esegue la differenza M0 – I0. Il risultato, che sarà di nuovo un numero
frazionario, si moltiplica per la base B ottenendo un numero M1. La parte
intera di questo numero I1 sarà la seconda cifra frazionaria.
Ø Si continuerà ancora come nel punto precedente fino ad ottenere un numero
M intero, quest’ultimo sarà l’ultima cifra o la cifra meno significativa del
numero cercato e il processo verrà interrotto.
7
Se M non risulta mai intero, allora il processo sarà interrotto quando si è raggiunta
la precisione richiesta.
Esempi:
Convertire in base 2 il numero 0,8125(10)
N(10)
Fattore
M
I
0.8125
0.625
0.25
0.50
*2
*2
*2
*2
1.625
1.25
0.50
1.00
1
1
0
1
Si ottiene, quindi:
0,1101(2)
Convertire in base 8 il numero 0,283203125(10)
N(10)
Fattore
M
I
0.283203125
*8
2,265625
2
0.265625
0.125
*8
*8
2,125
1,00
2
1
Pertanto si ha:
0,221(8)
Convertire in base 16 il numero 0,283203125(10)
N(10)
Fattore
M
I
0,283203125
*16
4,53125
4
0,53125
0,5
*16
*16
8,5
8,00
8
8
Si ha quindi:
0,488(16)
8
Se il numero decimale da convertire è un numero frazionario positivo maggiore di 1,
bisogna separare la parte intera dalla parte frazionaria e poi convertire separatamente
i due numeri ottenuti.
Esempio:
Convertire in binario il seguente numero decimale:
23(10) che convertito in binario è:
23,8125(10) la parte intera è
10111(2); la parte frazionaria è 0,8125(10) che
convertita in binario è: 0,1101(2). Pertanto il numero 23,8125(10) convertito in binario
sarà: 10111,1101.
Alla stesso modo si ragiona per convertire un qualsiasi numero decimale frazionario
positivo maggiore di 1 sia in base 8 che in base 16.
Conversione di un numero da base B1 a B2.
Per convertire un numero da base B1 a base B2, conviene usare una base intermedia,
generalmente si usa la base 10. Dalla se B1 il numero viene convertito in base 10 e,
successivamente, dalla base 10 alla base B2.
Il passaggio dalla base 2 alla base 8=23 risulta abbastanza semplice. Si scompone il
numero binario in gruppi di tre cifre a partire da quella meno significativa e
sostituendo ad ogni gruppo il corrispondente numero ottale.
Esempio:
Convertire in ottale il seguente numero binario: 10101011111(2).
Viene scomposto in gruppi di tre cifre il numero binario: 10 101 011 111 e,
pertanto, si ha: 2537(8).
9
Altrettanto semplice risulta il passaggio dalla base 2 alla base 16=24. Si scompone il
numero binario in gruppi di quattro cifre a partire da quella meno significativa e
sostituendo ad ogni gruppo il corrispondente numero esadecimale.
Esempio:
Convertire in esadecimale il seguente numero binario: 1110101011111(2).
Viene scomposto in gruppi di quattro cifre il numero binario: 1 1101 0101 1111 e,
pertanto, si ha: 1D5F(16).
Procedimento inverso si usa per passare dalla base 8 alla base 2. Ad ogni numero nel
sistema ottale si fa corrispondere un numero binario composto da tre bit.
Esempio:
Convertire in binario il seguente numero: 573(8) si ha : 101111011(2) .
Stesso procedimento viene seguito per passare dalla base 16 alla base 2. Ad ogni
numero nel sistema esadecimale si fa corrispondere un numero binario composto da
quattro bit.
Esempio:
Convertire in binario il seguente numero: 8A5C(16) si ha: 1000101001011100(2).
Operazioni aritmetiche con i numeri binari
Le regole utilizzate per le operazioni di addizione, sottrazione, moltiplicazione e
divisione non dipendono dalla base del sistema di numerazione utilizzato, cioè sono
invarianti rispetto alla base del sistema.
Somma di numeri binari
Nell’eseguire la somma fra due numeri binari bisogna tener conto delle seguenti
relazioni:
10
0+0=0
1+0=1
0+1=1
1 + 1 = 0 con il riporto (R) di 1; questa operazione altro non è che 1+1=10(2)=2(10).
Esempio:
Sommare i due numeri binari: 1010(2) ; 1011(2).
1R
1010(2) +
1011(2) =
10101(2)
Verifica
10(10)+
11(10)=
21(10)
Sottrazione di due numeri binari
Nell’eseguire la somma fra due numeri binari bisogna tener conto delle seguenti
relazioni:
0-0=0
1-0=1
0 - 1 = 1 con il prestito (P) di 1
1-1= 0
Esempio:
Sottrarre da 1000110(2) il numero 1101(2):
1P1 P 1P
1 0 0 0
0 0 0 1
0 1 1 1
1P
1 1 0(2) –
1 0 1(2) =
0 0 1(2)
verifica
70(10) 13(10) =
57(10)
11
Rappresentazione in modulo e segno dei numeri binari
I numeri del sistema binario possono essere rappresentati in modulo e segno. Per
rappresentare il segno viene utilizzato il bit più significativo (MSB), mentre gli altri
bit rappresentano il modulo. Se il bit più significativo è zero, il segno è positivo; se è
1 il segno è negativo. Per formato di un numero si intende il numero il numero di
cifre utilizzate per rappresentarlo. Se un numero rappresentato in modulo e segno ha
formato 8, significa che l’MSB rappresenta il segno mentre i rimanenti sette bit
rappresentano il modulo.
Complemento a 2 di un numero binario
Il metodo del complemento a 2 viene utilizzata nei calcolatori perché con esso
l’operazione di sottrazione è sostituita dall’operazione di addizione.
Per eseguire il complemento a due di un numero binario prima si calcola il
complemento a 1 del numero sostituendo ogni suo bit di valore 1 con un bit di valore
zero ed ogni suo bit di valore zero con un bit di valore 1, al risultato viene aggiunto 1.
Ad esempio se si ha il numero
101101001, il suo complemento a 1 è 010010110
per ottenere il complemento a 2 bisogna aggiungere a 1 al complemento a 1, cioè:
010010110 + 1 = 010010111.
Sottrazione fra due numeri binari col metodo del complemento a 2.
Per eseguire la sottrazione fra due numeri binari col metodo del complemento a due,
si ricava il complemento a 2 del sottraendo e poi si somma il minuendo con il
12
complemento a due del sottraendo trascurando l’eventuale riporto dell’ultima cifra. S
supponga di dover sottrarre dal numero 11101(2) il numero 01110(2). Il complemento
a 1 del sottraendo è : 10001 e quindi il complemento a 2 è 10001+1= 10010 si
somma ora il minuendo con il complemento a 2 ottenuto si ha:
1 1 1 0 1(2) +
1 0 0 1 0(2) =
101111
Il riporto 1 viene trascurato, quindi il risultato della differenza fra i due numeri dati
è : 01111.
Moltiplicazione fra due numeri binari.
Nell’eseguire la moltiplicazione fra due numeri binari bisogna tener conto delle
seguenti relazioni:
0x0=0
1x0=0
0x1=0
1x1= 1
Esempio:
Moltiplicare i due numeri binari 1101(2) e 11(2).
1101(2) x
11(2)=
1101
1101
100111(2)
13
La divisione fra due numeri binari
La divisione fra due numeri binari segue lo stesso schema della divisione nel sistema
decimale.
Esempio:
Dividere il numero 1111(2) per il numero 11(2).
11 11
11
11
101
0 11
11
0
Il risultato della divisione è:
101(2)
14
Somma e Sottrazione nel sistema Ottale
Eseguiamo, ora, alcune semplici operazioni di somma e sottrazione nel sistema
ottale.
Prima di iniziare il lavoro conviene costruire la seguente tabella.
+
1
2
3
4
5
6
7
1
2
3
4
5
6
7
10
2
3
4
5
6
7
10
11
3
4
5
6
7
10
11
12
4
5
6
7
10
11
12
13
5
6
7
10
11
12
13
14
6
7
10
11
12
13
14
15
7
10
11
12
13
14
15
16
Supponiamo di eseguire le seguenti somme:
a) 326(8) + 234(8) = 562(8)
Infatti:
1R
3 2 6(8) +
2 3 4(8) =
5 6 2(8)
b) 272(8) + 746(8) = 1240(8)
1R1R
2 7 2(8) +
7 4 6(8) =
1 2 4 0(8)
Supponiamo di eseguire, invece, le seguenti differenze:
a) 546(8) – 367(8) = 157(8)
Infatti:
1P 1P
5 4 6(8) –
3 6 7(8) =
1 5 7(8)
15
b) 342(8) – 173(8) = 147(8)
Infatti:
1P 1P
3 4 2(8) –
1 7 3(8) =
1 4 7(8)
Somma e sottrazione nel sistema esadecimale
Eseguiamo, ora, alcune semplici operazioni di somma e sottrazione nel sistema
esadecimale.
Prima di iniziare il lavoro conviene costruire la seguente tabella.
+
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
Supponiamo di eseguire le seguenti somme:
a) 4A6(16) + F2C(16) = 13D2(16)
16
Infatti:
1R
4 A 6(16) +
F 2 C(16) =
1 3 D 2(16)
b) B49(16) + E24(16) = 196D(16)
Infatti:
B 4 9(16) +
E 2 4(16) =
1 9 6 D(16)
Supponiamo di eseguire, invece, le seguenti differenze:
E49(16) – C5A(16) = 1EF(16)
Infatti:
1P 1P
E 4 9(16) –
C 5 A(16) =
1 E F(16)
F6A(16) – F5D(16) = D(16)
Infatti:
1P
F 6 A(16) –
F 5 D(16) =
= = D(16)
17