Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione
Scopo dellesercitazione è analizzare e comprendere le basi di numerazione tipicamente utilizzate nellambito informatico e prendere confidenza con le tecniche che consentono di effettuare la conversione di un numero da una base ad unaltra. Inoltre verranno analizzate anche alcune implementazioni di semplici reti logiche partendo dalla funzione logica. In particolare, si focalizzerà lattenzione su reti logiche di tipico utilizzo in circuiti digitali combinatori.
Analizziamo adesso le tecniche di conversione di un numero intero da una base ad unaltra. Per i nostri scopi, le basi significative sono 2 (binario), 8 (ottale), 10 (decimale) e 16 (esadecimale). Il sistema binario deve la sua importanza al fatto che esso riflette la rappresentazione intrinseca dei numeri (nonché dei dati) da parte di un calcolatore. I sistemi di numerazione ottale ed esadecimale sono invece molto comodi in molte occasioni. Si pensi ad esempio al caso in cui si debba debuggare un codice avendo la necessità di seguire il flusso dello stesso… rappresentare un indirizzo di 32 bit in binario sarebbe follia!
Convertire il seguente numero binario intero in base 8, 10 e 16. ( ) 2 Analizziamo la conversione base 2 base 8. Per fare questo, raggruppiamo le cifre binarie in gruppi di 3 aggiungendo eventualmente degli zeri in testa al numero (2345) 8 Esercizio 1
Vediamo adesso la conversione base 2 base 16. In questo caso si procede in maniera simile al caso analizzato in precedenza avendo laccortezza di raggruppare le cifre binarie in gruppi di 4. ( ) E 5 Quindi la rappresentazione esadecimale del numero è (4E5) 16.
Completiamo lesercizio analizzando la conversione base 2 base 10. Per fare questa conversione sfrutteremo il concetto di notazione posizionale in base alla quale un numero in base 2 di n cifre binarie può essere scritto come N = n-1 i=0 C i * 2 i con C i che può assumere valore 0 e 1.
Quindi, tornando allesercizio, si ottiene che ( ) 2 = 1 * * * * * * * * * * * 2 10 = = 1253 Quindi la rappresentazione decimale del numero è (1253) 10.
Vediamo adesso la conversione di base partendo da una base diversa da 2. Si faccia attenzione perché le tecniche fin qui introdotte possono essere fruttuosamente utilizzate per effettuare ad esempio una conversione da base 8 a base 16. In tal caso, infatti, risulta estremamente più semplice convertire il numero da base 8 a base 2 e successivamente da base 2 a base 16 (come visto in precedenza) piuttosto che effettuare la conversione direttamente. Vediamo un esercizio di conversione da base 8 ad unaltra base.
Convertire il seguente numero intero ottale (64752) 8 in base 2, 10 e 16. La cosa più conveniente da farsi è convertire prima di tutto il numero in base 2. Quindi convertendo cifra per cifra da cui la rappresentazione binaria del numero è ( ) 2. Esercizio 2
A questo punto, per effettuare la conversione di questo numero in base 10 e in base 16, si opera nella stessa identica maniera descritta in precedenza. Quindi, svolgendo i passaggi necessari si ottiene che (64752) 8 = ( ) 2 = (69EA) 16 = (27114) 10
Esercizi Proposti 1- Convertire il numero intero (38A9) 16 in base 2, 8 e 10. [soluzione : (34251) 8 = ( ) 2 = (14505) 10 ] 2- Convertire il numero intero (179711) 10 in base 2,8 e 16. [soluzione : (536777) 8 = ( ) 2 = (2BDFF) 16 ]
Esercizio 3 Vediamo adesso un esercizio di conversione da base 10 a base 2 di un numero intero. Consideriamo il numero decimale 45. La conversione si effettua in maniera semplice. resto 45 / 2 = / 2 = / 2 = / 2 = / 2 = Quindi, prendendo i resti in senso inverso, otteniamo la rappresentazione binaria (101101) 2.
A questo punto abbiamo analizzato tutti i casi che possono presentarsi nel momento in cui si debba effettuare una conversione di base per un numero intero. In generale, come abbiamo visto, conoscendo le tecniche di conversione da e verso la base 2 è possibile poi effettuare la conversione di un numero da una base diversa da 2 ad unaltra anchessa diversa da 2. Affrontiamo adesso la questione della rappresentazione di numeri interi con segno. In realtà, quanto detto in precedenza, è sempre valido per numeri interi positivi.
Rappresentazione di un numero intero negativo in complemento a 2 Vediamo adesso la rappresentazione in complemento a 2 di un numero intero con segno. Come già accennato, per i numeri interi positivi non cambia nulla. Vediamo invece per i numeri interi negativi come si procede. Per esempio convertiamo il numero decimale (-45) 10. La prima cosa da fare è ignorare momentaneamente il segno. Quindi il numero da convertire è (45) 10 che, abbiamo visto in precedenza equivale a (101101) 2. A questo punto dobbiamo invertire tutti le cifre binarie da cui e successivamente aggiungere 1 da cui (-45) 10 = ( ) 2
Esercizio 4 Effettuare la somma tra le seguenti coppie di numeri (54, 3) e (-54, -3) in binario. Prima di tutto, effettuiamo la conversione dei due numeri. resto 54 / 2 = / 2 = / 2 = / 2 = / 2 = 1 1 1
Quindi abbiamo (54) 10 = (110110) 2 (3) 10 = (11) 2 Sommiamo adesso i due numeri = Si verifica facilmente che questa è la rappresentazione in base 2 del numero decimale 57.
Adesso, partendo da quanto sappiamo, rappresentiamo i due numeri negativi in complemento a 2. (-54) (-3)
Procediamo adesso con la somma = Questa dovrebbe essere la rappresentazione in complemento a 2 di -57. Verifichiamo usando il procedimento inverso Il risultato è quindi corretto.
Conversione di numeri reali Convertire i numeri reali decimali 0.75 e 0.45 in base 2. In questo caso si procede in maniera duale rispetto ai casi precedenti operando una moltiplicazione per 2 e prendendo la parte intera. parte interaresto 0.75 * 2 = * 2 = Quindi si ottiene (0.75) 10 = (0.11) 2 Si noti che, in questo caso la procedura ha termine ma non è detto che questo succeda.
Vediamo laltro esempio parte interaresto 0.45 * 2 = * 2 = * 2 = * 2 = * 2 = * 2 = …….. In questo caso, la procedura non ha mai termine. Dobbiamo troncare quindi ottenendo come risultato ( …) 2.
Esercizio 5 Rappresentare il numero reale utilizzando una parola di 32 bit, utilizzando 1 bit per il segno, 7 bit per lesponente e 24 per la mantissa. Convertiamo prima di tutto la parte intera resto 18 / 2 = / 2 = / 2 = / 2 = Quindi (18) 10 = (10010) 2.
Convertiamo adesso mediante moltiplicazioni successive parte intera * 2 = * 2 = * 2 = 1 1 Quindi, alla fine di questa prima fase, abbiamo ottenuto che (18.125) 10 = ( ) 2 A questo punto dobbiamo procedere alla fase di normalizzazione.
Normalizzando otteniamo * 2 5 A questo punto, poiché 5 10 = (101) 2, la rappresentazione del numero è la seguente S ExpMantissa Questo nel caso in cui non si faccia uso dellesponente convenzionale.
Per rappresentare lo stesso numero considerando lesponente convenzionale, consideriamo che se i bit riservati allesponente sono 7 il range di valori assumibili dallesponente stesso è [ -64, +63 ]. Lesponente convenzionale si ottiene sommando allesponente reale il semirange che nel nostro caso vale 64. Il risultato è che, in questo modo, lesponente convenzionale è sempre un numero positivo. Tornando al nostro esempio, lesponente convenzionale è pari a (5 + 64) = 69.
Poiché si verifica facilmente che (69) 10 = ( ) 2 la rappresentazione è la seguente
Funzioni logiche Vediamo come semplici esempi di funzioni logiche la realizzazione di un half-adder e di un full-adder. HALF-ADDER Partiamo dalla tabella di verità ABOUTCARRY
Scriviamo queste tabelle organizzandole in maniera diversa. OUTB01 A CARRYB01 A
Da questa rappresentazione si ricava che OUT = (A AND (NOT(B))) OR (NOT(A) AND B) CARRY = A AND B Spesso, per semplicità di notazione, si scrive OUT = A · B + A · B CARRY = A · B
FULL-ADDER A BCOUT CARRY
AB C AB C
Quindi si ottiene OUT = A · B · C + A · B · C + A · B · C + A · B · C CARRY = A · B · C + A · B · C + A · B · C + A · B · C