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