Rappresentazione dei numeri

Elementi di informatica
Sistemi di numerazione posizionali
Rappresentazione dei numeri
Rappresentazione dei numeri
• nei calcolatori rappresentazioni finalizzate ad
algoritmi efficienti per le operazioni
• in genere codifica a lunghezza fissa
– l’insieme di numeri rappresentati è finito
• sistemi posizionali
ad eccezione dei numeri interi positivi (caso
banale), trasformazione del numero da
rappresentare in un altro numero
“rappresentabile” ...
Codifica dell'Informazione
2
1
trasformazione e codifica
• insieme X dei numeri da rappresentare
– X è un intervallo di numeri interi o reali
• insieme Y dei numeri rappresentati
– Y è un intervallo finito
• trasformazione di un numero x∈X in un numero
y∈ Y
– regola di trasformazione: y = R(x
R(x)
• rappresentazione in cifre (sistema
(sistema posizionale)
posizionale) di y
• codifica in bit delle cifre
Overflow e underflow
• overflow:
overflow: tentativo di rappresentare un numero esterno
all’
all’intervallo
–
Impossibilità
Impossibilità di rappresentare il numero
Utilizzando la numerazione posizionale in base 2 un numero M
espresso su n bit potrà
potrà assumere valori compresi tre 0 ≤ M ≤2n-1
• underflow:
underflow: un numero x ≠ 0 viene rappresentato da y = 0
–
ovviamente ha senso solo nel caso in cui X è un intervallo
di numeri reali, rappresentati da Y (intervallo finito) con
un’
un’approssimazione ε
2
Parametri di un sistema di
rappresentazione
•
•
•
•
intervallo numerico e tipo del numero x da rappresentare
regola di trasformazione y = R(x
R(x)
condizione di overflow
approssimazione ε e condizione di underflow
- solo per i reali
• base di numerazione
• codifica delle cifre in binario
- se la base della
numerazione è diversa
da 2
NB: se la base della
numerazione non è
binaria, la codifica del
numero in binario è
indiretta ...
I numeri naturali
• La rappresentazione dei numeri naturali è
fondamentale perché tutte le altre si rifanno a questa
• Numeri rappresentabili:
0 ≤ y < bn
• b è la base di numerazione
–
in pratica 2, 8, 16 … ma anche 10
• rappresentazione ad n cifre :
–
Cn-1 Cn-2 ....C0 , dove 0 ≤ Ci < b
• condizione di overflow:
overflow: x ≥ M
3
Aritmetica dei numeri naturali
• Algoritmi classici per la realizzazione delle operazioni
aritmetiche (noti dalle elementari)
• le regole sono le stesse per tutti i sistemi di
numerazione posizionali (non solo quello decimale):
–
–
–
per addizione e sottrazione numeri in colonna e riporto …,
per moltiplicazione e divisione uso di tavole pitagoriche
per le singole cifre …
un esempio ...
1 1 0 0 riporti
4987 +
3232
8219
Addizione in binario
L’addizione tra due numeri binari segue le stesse regole
dell’addizione tra due numeri decimali:
„ i due numeri sono incolonnati uno sopra l’altro.
„ si effettua la somma delle cifre di pari peso.
Tabella di addizione
Ai Bi Si
Ri
0 0 0
0
0 1 1
0
1 0 1
0
1 1 0
1
Ai+Bi = Si
Ri = Carry o Riporto
4
esempio
1
riporto
1
1
1
1
1
1
1
0
1
0
1
0
0
1
0
0
1
0
+
Sottrazione in binario
Anche la sottrazione segue le stesse regole della sottrazione tra
tra
due numeri decimali:
ƒ
ƒ
i due numeri sono incolonnati uno sopra l’altro.
si effettua la sottrazione delle cifre di pari peso.
Tabella della sottrazione
Ai Bi Si
Bi
0 0 0
0
0 1 1
1
1 0 1
0
1 1 0
0
AiAi-Bi = Si
Bi = Borrow o Prestito
5
esempio
1
1
0
1
1
0
1
1
0
0
1
0
1
-
borrow
Overflow
Nel caso in cui si abbia un numero limitato
di bit a disposizione , si possono avere due
casi particolari di errore:
ƒ Carry sul bit più significativo;
ƒ Borrow dal bit più significativo.
In entrambi i casi il numero di bit fissato non è
sufficiente per rappresentare il risultato.
Tale condizione si dice di overflow.
6
Esempio di overflow
Considerando i numeri binari di 4 bit,
effettuare la somma 9 + 7.
910=10012
710=01112
1
riporto
1
1
0
0
1
0
1
1
1
0
0
0
0
+
Il risultato non è rappresentabile su 4 bit,
quindi si ha overflow
Esempio di overflow
Considerando i numeri binari di 4 bit,
effettuare la sottrazione 5- 7.
510=01012
710=01112
1
borrow
0
1
0
1
0
1
1
1
1
1
1
0
-
Il risultato non è rappresentabile su 4 bit,
quindi si ha overflow
7
Operazione di scalamento a sinistra
Uno scalamento a sinistra di un numero binario
equivale ad una moltiplicazione per 2.
00101101
01011010
Inserito uno 0 in fondo
Uno scalamento di N posizioni a sinistra equivale
a moltiplicare il numero binario per 2 N .
Scalamento a destra
Uno scalamento a destra di un numero binario equivale
ad una divisione per 2.
00101101
00010110
Inserito uno 0 in cima
Scalamento a destra
Uno scalamento di N posizioni a destra equivale a
dividere il numero binario per 2 N .
8
Definizioni: numerali e numeri
Un numerale è solo una stringa di cifre
Un numerale rappresenta un numero solo se si
specifica un sistema di numerazione
Lo stesso numerale rappresenta diversi numeri
in diverse notazioni
Esempio
La stringa 110100 rappresenta:
– Centodiecimilacento in base 10
– (52)10 in base 2
– Un numero dell’ordine di vari milioni in base 16
Interi positivi e negativi
„ Finora abbiamo considerato solamente la
rappresentazione dei numeri positivi
„ Si utilizzano varie rappresentazioni per gli interi
relativi
„ Modulo e segno
„ Complemento a 1
„ Complemento a 2
„ Eccesso
„ Per rappresentare gli interi relativi, a parità di
cifre si dimezza l’intervallo dei valori assoluti
9
Rappresentazione con modulo e segno
Per rappresentare un numero con segno, si usa:
ƒ
ƒ
un bit per il segno: 0 per +, 1 per –
n-1 bit per il modulo
Intervallo di rappresentazione: [[-2 n-1 +1, +2 n-1 -1]
Esempio
n=4 bit intervallo [[-7,+7]
5 = 0101 -5 = 1101
Osservazioni
– Intervallo di rappresentazione simmetrico
– Problema: doppia rappresentazione dello zero (nel caso di 8 bit
10000000 e 00000000)
– Ulteriore problema: addizione e sottrazione complicata da segno dei
numeri, modulo dei numeri
Conversione da M&S a numero relativo
Per effettuare la conversione si scorpora il
numero in due parti:
„ Il bit più significativo è decodificato come segno
„ Gli NN-1 bit meno significativi sono decodificati come
valore assoluto del numero relativo
10
Esempio
Convertire nei corrispondenti numeri relativi le seguenti
rappresentazioni modulo e segno:
„
„
10100
01110.
10100:
1: bit di segno = numero negativo
0100: valore assoluto = 4
Il numero relativo corrispondente è -4
01110:
0: bit di segno = numero positivo
1110: valore assoluto = 14
Il numero relativo corrispondente vale +14.
... vantaggi e svantaggi
• vantaggio: coincide con la nostra usuale
rappresentazione
• svantaggio: richiede il trattamento separato di
segno e modulo: algoritmi aritmetici più
pesanti ...
... nei calcolatori, per ovviare agli svantaggi
dell’aritmetica della rappresentazione in segno
e modulo, si adottano altre rappresentazioni
...
11
Rappresentazione in complemento alla
base
Nella rappresentazione in complemento alla
base si dà una diversa attribuzione dei pesi
associati alle cifre che codificano il numero:
„ Alla cifra più alta è associato un peso negativo
„ Le cifre più basse hanno un peso positivo
Rappresentazione in complemento a 1
Si aggiunge uno 0 a sinistra alla rappresentazione dei
numeri positivi
Per cambiare di segno si complementa il numerale bit a bit
• I numerali positivi iniziano per 0, i negativi per 1
• Intervallo di rappresentazione con n bit: [[-2 n-1 +1, +2 n-1 -1]
• È una notazione posizionale:
posizionale:
Pesi delle cifre: ((-2 n-1 +1) 2 n-2 ... 2 1 2 0
Esempio
n=4 bit intervallo di rappresentazione [[-7, +7]
5 = 0101
-5 = 1010 ((-7+2)
Complementare = cambiare segno
Doppia rappresentazione dello 0
12
Rappresentazione in complemento a 2
I numeri positivi hanno la stessa rappresentazione che in
complemento a 1
I negativi si ottengono sommando 1 alla loro rappresentazione in
complemento a 1
Intervallo di rappresentazione con n bit: [[-2 n-1 , +2 n-1 -1]
n
1
n
2
1
0
Pesi delle cifre: -2 2
... 2 2
Consideriamo il numero espresso in base 2
x(n(n-1)x(n(n-2) …x0
• Il bit più significativo xn-1 assume peso negativo –2 n-1
• Quindi, il valore di un numero N espresso in complemento a 2 è
Intervallo più esteso ma asimmetrico
Una sola rappresentazione dello 0
Rappresentazione in complemento a 2
Esempio:
n=4 bit intervallo [[-8, +7]
510=0101c2
-510 = 1011C2 (-8+2+1)
Prima regola pratica per complementare (calcolare la rappresentazione di -X a
partire da quella di X):
Effettuare il complemento di ogni bit di X ed aggiungere 1
Esempio (4 bit)
+610=0110C2
Complemento di tutti i bit: 1001
Aggiungere 1: 1001+1 = 1010 C2 = -6 10
Seconda regola pratica per complementare:
Partendo da destra si lasciano invariati tutti i bit fino al primo
primo 1
compreso, e poi si complementa bit a bit
- Gli ultimi 2 bit rimangono invariati: __10
- Complementare gli altri 2 bit: 1010 C2 = -6 10
13
Conversione decimale-binario (CP1 e CP2)
Abbiamo già visto come fare se il numero X è positivo. Se il numero X è negativo:
negativo:
– Determinare il numero minimo di bit da usare (nmin )
– Convertire il numero positivo corrispondente in notazione a nmin bit
– Complementare (a 1 o 2) il numerale così ottenuto
Esempio: convertire ((-347)10 in CP2
2 8 = 256 < 347 < 512 = 2 9
intervallo con n bit: [[-2 n-1 ,+2 n-1 -1]
pertanto n min =10
+347 in notazione a 10 bit:
-512 256 128 64 32 16 8 4 2 1
0101011011
complementando a 2:
- 512 256 128 64 32 16 8 4 2 1
1010100101
In alternativa per CP2:
• Si converte in binario 2 n-1 +X
• Si mette il bit più significativo a 1
• Perché?
-1·2 n-1 + (2 n-1 +X) = X
Somma in complemento a due
Dati due numeri X e Y in complemento a due su N bit, la
somma X+Y si calcola sommando aritmeticamente
tutti i bit degli addendi, compreso quello di segno.
segno.
L’eventuale carry oltre il bit di segno viene tralasciato.
14
Esempio
Calcolare -( 7) + 10 in complemento a due su 5
bit.
- 7= 11001
10 = 01010
1
11001+
01010
00011
Tralasciando il carry,
carry, il risultato vale 00011 = +3.
Differenza in complemento a due
Si può procedere in due modi:
† Ci si riconduce al caso della somma trasformando
la differenza nella somma del primo numero con
l’opposto del secondo.
† Si esegue la differenza usando la stessa tecnica
utilizzata per la codifica in binario puro,
sottraendo aritmeticamente tutti i bit degli
addendi, compreso quello di segno.
15
Esempio
Calcolare ((-7) - 4 in complemento a due su 5 bit.
Si opera come se l’operazione fosse ((-7) + ((-4).
-7 = 11001
-4 = 11100
1
11001+
11100
10101
Tralasciando il carry, il risultato vale 10101 = -11.
Overflow in complemento a 2
† Si può verificare un overflow nell’operazione tra
due numeri in complemento a due quando si
effettua la somma di due numeri concordi o la
differenza tra due numeri discordi.
† Si ha overflow quando il segno del risultato è
diverso dal segno dei due addendi.
16
Esempio di overflow
Calcolare (-12) + (-6) in complemento a due su 5 bit:
(-12) = 10100
(-6) = 11010
1
10100+
11010
01110
Si ha carry oltre il bit di segno, che viene ignorato.
Il bit di segno è diverso da quello degli addendi, dunque
la somma ha prodotto overflow.
17