Università degli Studi di Messina
Dipartimento di Ingegneria Elettronica, Chimica e Ingegneria Industriale
Corso di Laurea
Ingegneria Elettronica e Informatica
Anno Accademico 2013/2014
Calcolatori
Sistemi numerici posizionali
Dario Bruneo
1
Nota
Le slide seguenti sono da intendersi come materiale didattico aggiuntivo del corso di
Calcolatori.
Non possono in nessun modo essere sostitutive dei libri di testo, devono
quindi essere usate esclusivamente come una guida.
Eventuali errori o segnalazioni possono essere inviati all’indirizzo dbruneo@[Link]
Alcune figure sono tratte da:
Mano, Kime “Logic and Computer Design Fundamentals” 3° edition Pearson Prentice Hall
Patterson, Hennessy “Struttura e progetto dei Calcolatori” 2a edizione Zanichelli
Calcolatori a.a. 13/14 Dario Bruneo
2
Sistemi numerici posizionali
I numeri vengono rappresentati mediante sequenze di cifre
Il valore associato ad ogni cifra dipende dalla sua posizione
Es. (sistema decimale)! ! 324,7 = 3*102 + 2*101 + 4*100 + 7*10-1
In generale, in un sistema posizionale in base b (i cui elementi sono le cifre 0,1, ,b-1), data una sequenza di
cifre:
an-1an-2 a0,a-1a-2 a-m
n−1
il valore del numero è dato dalla seguente espressione in serie: ∑ ab i
i
i=−m
an-1bn-1+an-2bn-2+ +a0b0,a-1b-1+a-2b-2+ +a-mb-m
Es. (sistema ottale)! ! ! (324.7)8 = 3*82 + 2*81 + 4*80 + 7*8-1
Calcolatori a.a. 13/14 Dario Bruneo
3
Sistemi numerici posizionali (cont.)
Nello studio dei calcolatori elettronici i sistemi numerici più importanti sono:
il sistema binario (base: 2 - cifre: {0,1})
il sistema esadecimale (base: 16 - cifre: {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F})
Per tale motivo verranno utilizzate spesso le potenze del 2
Tabella delle prime potenze del 2
Calcolatori a.a. 13/14 Dario Bruneo
4
Conversione da base b a base 10
La conversione in base dieci di un numero espresso in una qualsiasi base b è facilmente ottenibile
eseguendo, in aritmetica decimale, i calcoli relativi all’espressione in serie del numero stesso
Es. (sistema ottale)! ! ! ! (324,7)8 = 3*82 + 2*81 + 4*80 + 7*8-1 = 192 + 16 + 4 + 0,875 = (212,875)10
Nel caso del sistema binario i calcoli sono semplificati dal fatto che la potenza del 2 (base) deve essere
moltiplicata solo per 1 o per 0
Es. (sistema binario)! ! ! ! (100101,01)2 = 25 + 22 + 20 + 2-2= (37,25)10
Nel caso del sistema esadecimale si deve fare attenzione a far corrispondere alle lettere il corretto valore
decimale (A=10, B=11, C=12, D=13, E=14, F=15)
Es. (sistema esadecimale)! ! (21B,A)16 = 2*162 + 1*161 + 11*160 + 10*16-1= (539,625)10
Calcolatori a.a. 13/14 Dario Bruneo
5
Conversione da base 10 a base b
Per la conversione di un numero espresso in base 10 in una qualsiasi altra base è utile separare i due casi:
numeri interi e razionali
numeri interi: si consideri un numero intero N in base 10 da dovere convertire nella generica base b.
Dividendo N per la base b si ottengono un quoziente N1 ed un resto R1 tali che: N = N1*b + R1.
Dividendo a sua volta N1 per la base b si ottengono un quoziente N2 ed un resto R2 tali che: N1 = N2*b + R2, che, sostituiti nell’equazione
precedente, danno N = N2*b2 + R2b + R1.
Procedendo il ragionamento (dividendo N2 per la base b) si ottiene: N = N3*b3 + R3b2 + R2b + R1.
Ad un certo punto si otterrà un quoziente Nk < b tale che il risultato di una successiva divisione per b dia come quoziente 0 ed un resto
Rk
A questo punto si avrà: N = Rk*bk-1 + + R3b2 + R2b + R1.
I resti (R1, R2, ... Rk) sono, per le proprietà della divisione, numeri contenuti nella base b, quindi l’espressione Rk*bk-1 + + R3b2 + R2b + R1
corrisponderà all’espressione in serie del numero N nella base b
Quindi il numero in base b sarà dato da (N)b = RkRk-1 R1
Calcolatori a.a. 13/14 Dario Bruneo
6
Conversione da base 10 a base b (cont.)
esempio: “convertire in base 2 il numero 23” esempio:! “convertire in base 8 il numero 196”
23:2 = 11 ! con resto 1 196:8 = 24! ! con resto 4
11:2 = 5!! con resto 1 24:8 = 3!! ! con resto 0
5:2 = 2! ! con resto 1 3:8 = 0! ! ! con resto 3
2:2 = 1! ! con resto 0 Quindi si avrà: 196 = (304)8
1:2 = 0! ! con resto 1
Quindi si avrà: ! 23 = (10111)2
esempio:! “convertire in base 16 il numero 124”
124:16 = 7! con resto C (12)
7:16 = 0!! con resto 7
Quindi si avrà: 124 = (7C)16
Calcolatori a.a. 13/14 Dario Bruneo
7
Conversione da base 10 a base b (cont.)
numeri razionali: si consideri un numero razionale F (per semplicità si considera solo la parte frazionaria) in base 10 da dovere
convertire nella generica base b
Tale numero, espresso nella base b, sarà rappresentato da 0,a-1a-2a-3... con ai compreso tra 0 e b-1
ed avrà un valore dato da:! ! F = a-1b-1 + a-2b-2 + a-3b-3 + ...
Se si moltiplica F per la base b si ottiene:!! b*F = a-1 + a-2b-1 + a-3b-2 + ...
Quindi, la parte intera di b*F (che sarà sicuramente compresa tra 0 e b-1 essendo 0 < F < 1) coincide con il coefficiente più significativo
(a-1) della rappresentazione in base b del numero F
Considerando la rimanente parte frazionaria (F1 = a-2b-1 + a-3b-2 + ...) e ripetendo il procedimento si otterrà il secondo coefficiente, infatti
b*F1 = = a-2 + a-3b-1 + ...
Si procede, nello stesso modo, per ottenere gli altri coefficienti fino ad ottenere una parte frazionaria nulla
Tale procedimento non è necessariamente esatto: una frazione decimale con un numero finito di cifre potrebbe richiedere, in base b, un
numero infinito di cifre
In tal caso il procedimento si può arrestare in funzione della precisione richiesta
Calcolatori a.a. 13/14 Dario Bruneo
8
Conversione da base 10 a base b (cont.)
esempio: !“convertire in base 2 il numero 0,25” esempio:!“convertire in base 2 il numero 0,3”
0,25*2 = 0,5 ! con parte intera 0 0,3*2 = 0,6! ! con parte intera 0
0,50*2 = 1,0 ! con parte intera 1 0,6*2 = 1,2! ! con parte intera 1
Quindi si avrà: ! 0,25 = (0,01)2 (risultato esatto) 0,2*2 = 0,4 !! con parte intera 0
0,4*2 = 0,8 !! con parte intera 0
0,8*2 = 1,6 !! con parte intera 1
esempio:!“convertire in base 2 il numero 0,81” 0,6*2 = 1,2! ! con parte intera 1
0,81*2 = 1,62 ! con parte intera 1 Quindi si avrà: 0,3 = (0,01001)2
0,62*2 = 1,24 ! con parte intera 1
0,24*2 = 0,48 ! con parte intera 0
0,48*2 = 0,96 ! con parte intera 0
0,96*2 = 1,92 ! con parte intera 1
Quindi si avrà: 0,81 = (0,11001)2 (precisione 5)
Calcolatori a.a. 13/14 Dario Bruneo
9
Conversione da base b1 a base b2
Normalmente, per la conversione da una generica base b1 ad una generica base b2 conviene sempre passare
dalla base 10!! (N)b1 ➔ (N)10 ➔ (N)b2
Ciò è dovuto alla nostra familiarità nello svolgere operazioni algebriche in base 10
Fanno eccezione le conversioni tra basi potenze dello stesso numero (ad es. 2 - 16 = 24)
In questo caso la conversione è immediata infatti ad ogni cifra esadecimale corrisponderanno 4 cifre binare
es: “convertire in base 2 il numero (1A2)16
si procede convertendo ogni singola cifra esadecimale nel corrispondente binario ottenendo: ! (1A2)16 = (0001 1010 0010)2
es: ! “convertire in base 16 il numero (1001010)2
si procede raggruppando, a partire dal bit meno significativo, le cifre binarie a 4 a 4 e convertendole nel corrispondente esadecimale, si
ottiene: (100 1010)2 = (4A)16
Analogo discorso vale per la conversione tra base 2 e base 8 (ogni cifra ottale corrisponde a 3 cifre binarie)
Calcolatori a.a. 13/14 Dario Bruneo
10
Operazioni aritmetiche in base 2
Le operazioni aritmetiche in una generica base seguono le regole dell’aritmetica decimale
In binario, essendo solo 2 i simboli, le operazioni sono notevolmente facilitate (non esistono le tabelline!):
0 + 0 = 0! 0+1=1 1 + 1 = 10 0-0=0 1-0=1 0*0=0 1*0=0 1*1=1
Somma Sottrazione
riporto ➔ 1 1 prestito ➔ 1 1 1
addendo (4)10 1 0 0 + minuendo (12)10 1 1 0 0 -
addendo (13)10 1 1 0 1 = sottraendo (7)10 1 1 1 =
risultato (17)10 1 0 0 0 1 risultato (5)10 0 1 0 1
Moltiplicazione Divisione
moltiplicando (11)10 1 0 1 1 *
dividendo ↓ divisore ↓
moltiplicatore (6)10 1 1 0 =
0 0 0 0 +
(27)10 1 1 0 1 1 1 1 (3)10
prodotti parziali ➔ 1 0 1 1 +
1 0 1 1 = - - 0 1 1 0 0 1 (9)10
risultato (66)10 1 0 0 0 0 1 0
- 1 1 risultato ↑
Calcolatori a.a. 13/14 Dario Bruneo
11
Complementi
Nello studio e nella progettazione dei calcolatori elettronici, come vedremo, giocano un ruolo fondamentale
i concetti di complemento alla base-1 e complemento alla base
Si definisce complemento alla base-1 di un numero intero positivo N (espresso in base b con un numero di
cifre n), il numero Nc-1 che si si deve sommare a N per ottenere il valore bn-1
Nc-1 = (bn-1) - N
In pratica, consiste nello scambiare ogni cifra ai con (b - 1 - ai)
Ad esempio, in decimale, il complemento alla base-1 di 37 sarà:! ! 37c-1 = (102 - 1) - 37 = 62
In base 2 tale operazione risulta molto semplice perchè consiste nell’invertire tutti i bit 1 in 0 e viceversa
Ad esempio, il complemento di 10010 sarà 01101, infatti:
1 1 1 1
1 0 0 0 0 0 - 1 1 1 1 1 -
25 = 100000! ! 25-1 = 1 = = 11111 !! ! 11111 - 10010 = 1 0 0 1 0 = = 01101
1 1 1 1 1 0 1 1 0 1
Calcolatori a.a. 13/14 Dario Bruneo
12
Complementi (cont.)
Si definisce complemento alla base di un numero intero positivo N (espresso in base b con un numero di
cifre n), il numero Nc che si si deve sommare a N per ottenere il valore bn
Nc = bn - N
Si ottiene facilmente dal complemento alla base-1 sommando 1
Ad esempio, in decimale:
Il complemento alla base di 3457 sarà dato dal suo complemento alla base-1 +1, cioè: 6542+1 = 6543
Ad esempio, in binario:
Il complemento alla base di 100111010 sarà dato dal suo complemento alla base-1 +1 cioè: 011000101 + 1 = 011000110
Calcolatori a.a. 13/14 Dario Bruneo
13
Complementi (cont.)
Si noti che:
Il calcolo del complemento di un numero (sia alla base-1 che alla base) è influenzato dal numero di cifre:
(23c-1 = 76) ≠ (023c-1 = 976)
Il complemento alla base-1 di un numero a n cifre ha sempre un numero di cifre pari a n (eventualmente con alcuni 0 all’inizio)
Il complemento alla base di un numero a n cifre ha un numero di cifre pari a n+1 nel caso in cui il numero di partenza sia composto da
tutti 0
Es. (binario)! ! 000c = 111 + 1 = 1000
Se si limita a n il numero di cifre del complemento alla base di un numero a n cifre allora il complemento alla base di 0 sarà sempre 0
Es. (binario)! ! 00000c = 11111 + 1 = 100000
Si ignora il riporto nella (n+1)-esima colonna
In binario il complemento a 2 del numero formato dal primo bit significativo a 1 e dai rimanenti bit a 0 coincide con il numero stesso
Es. (binario)! (100000)c = 011111 + 1 = 100000
Calcolatori a.a. 13/14 Dario Bruneo
14