LA CODIFICA dei NUMERI INTERI

LA CODIFICA dei
NUMERI INTERI
Prof. Enrico Terrone
A. S: 2008/09
Il vincolo dimensionale
Fino adesso abbiamo effettuato conversioni dalla
base 10 alla base 2 utilizzando tante cifre binarie (bit)
quante ne avevamo bisogno.
In realtà nel linguaggio macchina la quantità di cifre
disponibili per rappresentare un numero è limitata
dalle dimensioni degli spazi di memoria, e si lavora
sempre con un numero predefinito di bit.
Esempio: spazio disponibile di 8 bit ( = 1 byte)
(23)10 =
0 0 0 1 0 1 1 1 in base 2 su un byte
^ ^ ^ ^ ^ ^ ^ ^
(413)10 =
non rappresentabile in base 2 su un byte
Le operazioni in base 2
In generale la regola è che con n bit si possono
rappresentare 2n valori diversi.
Pertanto i numeri naturali rappresentabili con n bit
sono i valori nell’intervallo [0, 2n-1]
Sui numeri in base 2 si possono effettuare operazioni
come sui numeri in base 10, con la tecnica del riporto.
Noi vediamo soltanto l’addizione, per la quale valgono
le seguenti regole:
• 0+0 = 0
• 1+0 = 1
•0+1=1
• 1 + 1 = 0 (con riporto di 1)
• 1 + 1 + (riporto di 1) = 1 (con riporto di 1)
Modulo e segno
La tecnica più intuitiva per rappresentare gli interi
consiste nell’utilizzare il bit più a sinistra fra quelli
disponibili per codificare il segno (con la
corrispondenza 0=+, 1= -)
Es.
(-23)10 =
1 0 0 1 0 1 1 1 (in mod e segno su un byte)
^ ^ ^ ^ ^ ^ ^ ^
Questa tecnica, che si chiama “modulo e segno”, se
usata con n bit disponibili, permette di rappresentare
valori nell’intervallo:
[- 2n-1-1, + 2n-1-1]
Complemento a due
La tecnica modulo e segno in pratica è poco usata
perché ha due rappresentazioni dello zero.
Al suo posto si usa la tecnica detta “complemento a
due” (Ca2) che per codificare il numero intero x su
n bit si basa sulle seguenti regole:
1) Se x è positivo si codifica normalmente, come
fosse un numero naturale;
2) Se il numero è negativo, al suo posto si codifica il
valore y = 2n – |x|
La tecnica del “complemento a due”, se usata con n
bit disponibili, permette di rappresentare valori
nell’intervallo: [- 2n-1, + 2n-1-1]
(lo zero viene contato come positivo)
Complemento a due
Per convertire un numero da base 10 a Ca2 su n bit,
per prima cosa si controlla che esso stia
nell’intervallo di rappresentabilità. Se è così, allora
si applicano le due regole viste prima.
Per convertire un numero da Ca2 su n bit a base 10,
per prima cosa si guarda se l’ultima cifra a sinistra
è 0 oppure 1:
• Se è 0, si converte il numero e gli si mette segno +
• Se è 1, si converte il numero e si sottrae 2n
(ottenendo sempre un valore negativo)
Il Ca2 ha il vantaggio di permettere l’operazione di
somma con la stessa regola vista per i naturali.
Quando il risultato non è rappresentabile con i bit a
disposizione si parla di overflow
Esercizi
Effettuare le seguenti conversioni:
1) 111001 da Ca2 a base 10
2) 39 da base 10 a Ca2 su 7 bit
3) 110110000111 da Ca2 a base 10
4) -520 da base 10 a Ca2 su 12 bit
5) 85 da base 10 a Ca2 su 7 bit
6) 00110110 da Ca2 a base 10