fondamenti di informatica i facoltà di ingegneria informatica esercitazione

34
Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Upload: maso-d-amico

Post on 01-May-2015

232 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Fondamenti di Informatica I

Facoltà di Ingegneria Informatica

Esercitazione

Page 2: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Scopo dell’esercitazione è analizzare e comprendere le basi di numerazione tipicamente utilizzate nell’ambito informatico e prendere confidenza con le tecniche che consentono di effettuare la conversione di un numero da una base ad un’altra.

Inoltre verranno analizzate anche alcune implementazioni di semplici reti logiche partendo dalla funzione logica. In particolare, si focalizzerà l’attenzione su reti logiche di tipico utilizzo in circuiti digitali combinatori.

Page 3: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Analizziamo adesso le tecniche di conversione di un numero intero da una base ad un’altra. 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!

Page 4: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione
Page 5: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Convertire il seguente numero binario intero in base 8, 10 e 16.

(10011100101)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.

010 011 100 101

2 3 4 5 → (2345)8

Esercizio 1

Page 6: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Vediamo adesso la conversione base 2 → base 16. In questo caso si procede in maniera simile al caso analizzato in precedenza avendo l’accortezza di raggruppare le cifre binarie in gruppi di 4.

(10011100101)2

0100 1110 0101

4 E 5

Quindi la rappresentazione esadecimale del numero è (4E5)16.

Page 7: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Completiamo l’esercizio 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-1i=0 Ci * 2i

con Ci che può assumere valore 0 e 1.

Page 8: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Quindi, tornando all’esercizio, si ottiene che

(10011100101)2 =

1 * 20 + 0 * 21 + 1 * 22 + 0 * 2 3 + 0 * 24 + 1 * 2 5 +

1 * 26 + 1 * 2 7 + 0 * 2 8 + 0 * 2 9 + 1 * 210 =

1 + 4 + 32 + 64 + 128 + 1024 =

1253

Quindi la rappresentazione decimale del numero è (1253)10.

Page 9: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

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 un’altra base.

Page 10: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

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

6 → 110

4 → 100

7 → 111

5 → 101

2 → 010

da cui la rappresentazione binaria del numero è (110100111101010)2.

Esercizio 2

Page 11: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

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 = (110100111101010)2 = (69EA)16 = (27114)10

Page 12: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Esercizi Proposti

1- Convertire il numero intero (38A9)16 in base 2, 8 e 10.

[soluzione : (34251)8 = (11100010101001)2 = (14505)10 ]

2- Convertire il numero intero (179711)10 in base 2,8 e 16.

[soluzione : (536777)8 = (101011110111111111)2 = (2BDFF)16 ]

Page 13: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

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 = 22 1

22 / 2 = 11 0

11 / 2 = 5 1

5 / 2 = 2 1

2 / 2 = 1 0

1

Quindi, prendendo i resti in senso inverso, otteniamo la rappresentazione binaria (101101)2.

Page 14: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

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 un’altra anch’essa 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.

Page 15: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

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

0101101 → 1010010

e successivamente aggiungere 1 da cui

(-45)10 = (1010011)2

Page 16: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

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 = 27 0

27 / 2 = 13 1

13 / 2 = 6 1

6 / 2 = 3 0

3 / 2 = 1 1

1

Page 17: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Quindi abbiamo

(54)10 = (110110)2

(3)10 = (11)2

Sommiamo adesso i due numeri

110110 +000011 =

111001

Si verifica facilmente che questa è la rappresentazione in base 2 del numero decimale 57.

Page 18: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Adesso, partendo da quanto sappiamo, rappresentiamo i due numeri negativi in complemento a 2.

(-54)10

+1

0110110 → 1001001 → 1001010

(-3)10

+1

0000011 → 1111100 → 1111101

Page 19: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Procediamo adesso con la somma

1001010 +1111101 =

11000111

Questa dovrebbe essere la rappresentazione in complemento a 2 di -57. Verifichiamo usando il procedimento inverso.

-111000111 → 11000110 → 00111001

Il risultato è quindi corretto.

Page 20: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

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 intera resto

0.75 * 2 = 1.5 1 0.5

0.5 * 2 = 1 1 0

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.

Page 21: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Vediamo l’altro esempio

parte intera resto

0.45 * 2 = 0.90 0 0.90

0.90 * 2 = 1.80 1 0.80

0.80 * 2 = 1.60 1 0.60

0.60 * 2 = 1.20 1 0.20

0.20 * 2 = 0.40 0 0.40

0.40 * 2 = 0.80 0 0.80

……..

In questo caso, la procedura non ha mai termine. Dobbiamo troncare quindi ottenendo come risultato (0.011100…)2 .

Page 22: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Esercizio 5

Rappresentare il numero reale 18.125 utilizzando una parola di 32 bit, utilizzando 1 bit per il segno, 7 bit per l’esponente e 24 per la mantissa.

Convertiamo prima di tutto la parte intera

resto

18 / 2 = 9 0

9 / 2 = 4 1

4 / 2 = 2 0

2 / 2 = 1 0

1

Quindi (18)10 = (10010)2.

Page 23: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Convertiamo adesso 0.125 mediante moltiplicazioni successive

parte intera

0.125 * 2 = 0.25 0

0.25 * 2 = 0.5 0

0.5 * 2 = 1 1

Quindi, alla fine di questa prima fase, abbiamo ottenuto che

(18.125)10 = (10010.001)2

A questo punto dobbiamo procedere alla fase di normalizzazione.

Page 24: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Normalizzando otteniamo

10010.001 → 0.10010001 * 25

A questo punto, poiché 510 = (101)2, la rappresentazione del numero è la seguente

0 0000101 100100010000000000000000

S Exp Mantissa

Questo nel caso in cui non si faccia uso dell’esponente convenzionale.

Page 25: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Per rappresentare lo stesso numero considerando l’esponente convenzionale, consideriamo che se i bit riservati all’esponente sono 7 il range di valori assumibili dall’esponente stesso è [ -64, +63 ]. L’esponente convenzionale si ottiene sommando all’esponente reale il semirange che nel nostro caso vale 64.

Il risultato è che, in questo modo, l’esponente convenzionale è sempre un numero positivo.

Tornando al nostro esempio, l’esponente convenzionale è pari a (5 + 64) = 69.

Page 26: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Poiché si verifica facilmente che

(69)10 = (1000101)2

la rappresentazione è la seguente

0 1000101 100100010000000000000000

Page 27: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

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à

A B OUT CARRY

0 0 0 0

0 1 1 0

1 0 1 0

1 1 0 1

Page 28: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

Scriviamo queste tabelle organizzandole in maniera diversa.

OUT B 0 1

A

0 0 1

1 1 0

CARRY B 0 1

A

0 0 0

1 0 1

Page 29: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

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

Page 30: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione
Page 31: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

FULL-ADDER

A B C OUT CARRY

0 0 0 0 0

0 0 1 1 0

0 1 0 1 0

0 1 1 0 1

1 0 0 1 0

1 0 1 0 1

1 1 0 0 1

1 1 1 1 1

Page 32: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

AB 00 01 10 11

C

0 0 1 1 0

1 1 0 0 1

AB 00 01 10 11

C

0 0 0 0 1

1 0 1 1 1

Page 33: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione

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

Page 34: Fondamenti di Informatica I Facoltà di Ingegneria Informatica Esercitazione