Lezione 22 (7 maggio 2012)

35
Abilità Informatiche Ingegneria Chimica Lezione 22 del 7/5/2012 Prof. Antonino Stelitano

Transcript of Lezione 22 (7 maggio 2012)

Page 1: Lezione 22 (7 maggio 2012)

Abilità Informatiche

Ingegneria Chimica

Lezione 22 del 7/5/2012

Prof. Antonino Stelitano

Page 2: Lezione 22 (7 maggio 2012)

Docente Antonino Stelitano

Tutor

Lezioni Lunedì

Mercoledì

14:00 – 17:30 aula 16 15:45 – 19:00 aula 17

Lab. Paolo Ercoli – via Tiburtina 205

Ricevimento: Per appuntamento [email protected]

[email protected]

Sito web: http://w3.uniroma1.it/ab_informatiche

Page 3: Lezione 22 (7 maggio 2012)

Complemento a due

Il complemento a due è il metodo più diffuso per la

rappresentazione dei numeri negativi in informatica. L'espressione

complemento a due viene spesso usata impropriamente per indicare

l'operazione di negazione.

La sua enorme diffusione è data dal fatto che i circuiti di addizione e

sottrazione non devono esaminare il segno di un numero

rappresentato con questo sistema per determinare quale delle due

operazioni sia necessaria, permettendo tecnologie più semplici e

maggiore precisione; si utilizza un solo circuito, il sommatore, sia

per l'addizione che per la sottrazione.

Page 4: Lezione 22 (7 maggio 2012)

Complemento a due

Col complemento a due, il bit iniziale (più a sinistra) del

numero ha peso negativo o positivo; da questo deriva che

tutti i numeri che cominciano con un "1" sono numeri

binari negativi, mentre tutti i numeri che cominciano con

uno "0" sono numeri binari positivi. Si può così ottenere il

valore assoluto di un numero binario negativo, prendendo

il complementare (invertendo) il valore dei singoli bit e

aggiungendo 1 al numero binario risultante.

Page 5: Lezione 22 (7 maggio 2012)

Complemento a due

Un numero binario di n cifre può rappresentare

con questo metodo i numeri compresi fra

[-2n-1 , +2n-1-1], così un binario di 8 cifre può

rappresentare i numeri compresi tra -128 e +127.

Page 6: Lezione 22 (7 maggio 2012)

Complemento a due

Questo metodo consente di avere un'unica

rappresentazione dello zero (quando tutti i bit

sono zero, eliminando così la ridondanza dello

zero che si verifica con la rappresentazione in

modulo e segno), e di operare efficientemente

addizione e sottrazione sempre avendo il primo

bit a indicare il segno.

Page 7: Lezione 22 (7 maggio 2012)

Complemento a due

Per rappresentare l'opposto di un numero binario in

complemento se ne invertono, o negano, i singoli bit: si

applica cioè

l'[[operazione logica]] [[Negazione (matematica)|NOT]].

Si aggiunge infine 1 al valore del numero trovato con

questa operazione.

Page 8: Lezione 22 (7 maggio 2012)

Complemento a due

Facciamo un esempio rappresentando il numero -5 con

8 bit in complemento a 2.

Partiamo dalla rappresentazione in binario del numero 5:

0000 0101 (5)

La prima cifra è 0, quindi il numero è sicuramente

positivo. Invertiamo i bit: 0 diventa 1, e 1 diventa 0:

1111 1010

Page 9: Lezione 22 (7 maggio 2012)

Complemento a due Il complemento a due di un numero negativo ne

restituisce il numero positivo pari al valore assoluto:

invertendo i bit della rappresentazione del numero -5

(sopra) otteniamo:

0000 0100

Aggiungendo 1 otteniamo:

0000 0101

Che è appunto la rappresentazione del numero +5

in forma binaria.

Page 10: Lezione 22 (7 maggio 2012)

Complemento a due

Si noti che il complemento a due dello zero è zero

stesso: invertendone la rappresentazione si ottiene un

byte di 8 bit pari a 1, e aggiungendo 1 si ritorna a tutti

0 (l'overflow viene ignorato).

Page 11: Lezione 22 (7 maggio 2012)

Complemento a due

Si noti che il complemento a due dello zero è zero

stesso: invertendone la rappresentazione si ottiene un

byte di 8 bit pari a 1, e aggiungendo 1 si ritorna a tutti

0 (l'overflow viene ignorato).

Page 12: Lezione 22 (7 maggio 2012)

Addizione

Operare l'addizione di due interi rappresentati con

questo metodo non richiede processi speciali se essi

sono di segno opposto, e il segno viene determinato

automaticamente. Facciamo un esempio addizionando

15 e -5:

11111 1110 (riporto)

0000 1111 (15)

+ 1111 1011 (-5)

========

0000 1010 (10)

Page 13: Lezione 22 (7 maggio 2012)

Questo processo gioca sulla lunghezza fissa di 8 bit

della rappresentazione: viene ignorato un riporto di 1

che causerebbe un overflow, e rimane il risultato

corretto dell'operazione (10).

Addizione

Page 14: Lezione 22 (7 maggio 2012)

Gli ultimi due bit (da destra a sinistra), ovvero i più

significativi, della riga dei riporti contengono importanti

informazioni sulla validità dell'operazione: se il risultato è

compreso o non è compreso nell'intervallo dei numeri

rappresentabili. Si verifica se il riporto è stato eseguito sul

bit del segno ma non è stato portato fuori, o viceversa;

Addizione

più semplicemente, se i due bit più a sinistra sulla riga dei

riporti non sono entrambi 0 o 1. Per verificare la validità del

risultato è conveniente eseguire su questi due bit

un'operazione EXOR.

Page 15: Lezione 22 (7 maggio 2012)

Addizione

01110 (riporto) 0111 (7) + 0011 (3)

=========== 1010 (-6)

Vediamo un esempio di addizione a 4 bit di 7 e 3:

In questo caso, come si può notare dal riporto presente solo

sul bit più significativo, si è in presenza di overflow, per cui il

risultato non è 10 (come sarebbe corretto) ma -6,

Page 16: Lezione 22 (7 maggio 2012)

Addizione

infatti il massimo numero positivo rappresentabile in

complemento a due su quattro bit è 7 (con n=4: 2n-1 - 1 = 7).

Page 17: Lezione 22 (7 maggio 2012)

Esercizi

Dati i seguenti numeri decimali interi positivi: 55, 121, 16, 42

– Rappresentarli come numeri binari su 8 bit – Determinare i numeri negativi corrispondenti in binario con le seguenti rappresentazioni: • Valore assoluto e segno

• In complemento a 1

• In complemento a 2

Page 18: Lezione 22 (7 maggio 2012)

5510

55/2 = 27 con resto 1 27/2 = 13 con resto 1 13/2 = 6 con resto 1 6/2 = 3 con resto 0 3/2 = 1 con resto 1 1/2 = 0 con resto 1

5510 = 001101112

Page 19: Lezione 22 (7 maggio 2012)

12110

121/2 = 60 con resto 1 60/2 = 30 con resto 0 30/2 = 15 con resto 0 15/2 = 7 con resto 1 7/2 = 3 con resto 1 3/2 = 1 con resto 1 1/2 = 0 con resto 1

12110 = 011110012

Page 20: Lezione 22 (7 maggio 2012)

1610

16/2 = 8 con resto 0 8/2 = 4 con resto 0 4/2 = 2 con resto 0 2/2 = 1 con resto 0 1/2 = 0 con resto 1

1610 = 000100002

Page 21: Lezione 22 (7 maggio 2012)

4210

42/2 = 21 con resto 0 21/2 = 10 con resto 1 10/2 = 5 con resto 0 5/2 = 2 con resto 1 2/2 = 1 con resto 0 1/2 = 0 con resto 1

4210 = 001010102

Page 22: Lezione 22 (7 maggio 2012)

5510 = 0 0 1 1 0 1 1 12

-5510 = 1 0 1 1 0 1 1 12

1610 = 0 0 0 1 0 0 0 02

-1610 = 1 0 0 1 0 0 0 02

CODIFICA IN MODULO E SEGNO

12110 = 0 1 1 1 1 0 0 12

-121 10 = 1 1 1 1 1 0 0 12

4210 = 0 0 1 0 1 0 1 02

-4210 = 1 0 1 0 1 0 1 02

Page 23: Lezione 22 (7 maggio 2012)

5510 = 0 0 1 1 0 1 1 12

-5510 = 1 1 0 0 1 0 0 02

12110 = 0 1 1 1 1 0 0 12

-12110 = 1 0 0 0 0 1 1 02

1610 = 0 0 0 1 0 0 0 02

-1610 = 1 1 1 0 1 1 1 12

4210 = 0 0 1 0 1 0 1 02

-4210 = 1 1 0 1 0 1 0 12

CODIFICA IN COMPLEMENTO A 1

Page 24: Lezione 22 (7 maggio 2012)

CODIFICA IN COMPLEMENTO A 2

5510 = 0 0 1 1 0 1 1 12

-5510 = 1 1 0 0 1 0 0 12

12110 = 0 1 1 1 1 0 0 12

-12110 = 1 0 0 0 0 1 1 12

1610 = 0 0 0 1 0 0 0 02

-1610 = 1 1 1 1 0 0 0 02

4210= 0 0 1 0 1 0 1 02

-4210 = 1 1 0 1 0 1 1 02

Page 25: Lezione 22 (7 maggio 2012)

Esercizi

• Fare la somma dei numeri binari in complemento a 2 codificati su n = 8 bit che

corrispondono ai numeri 16dieci e –42dieci

• Fare la somma dei numeri binari in complemento a 2 codificati su n = 6 bit che

corrispondono ai numeri -5dieci e –28dieci

Page 26: Lezione 22 (7 maggio 2012)

[16] 0 0 0 1 0 0 0 0 + [-42] 1 1 0 1 0 1 1 0 1 1 1 0 0 1 1 0

1 1 1 0 0 1 1 0 Segno: negativo (1) Modulo del numero: si ottiene facendo il complemento a 2 di : 1 1 0 0 1 1 0 0 0 1 1 0 1 0

16 + 8 + 2 = 26 Quindi –2610

… oppure si calcola: (–1)x2^6+1x2^5+1x2^2+1x2^1= –64+32+4+2 = –2610

Soluzioni degli esercizi

Somma di numeri in complemento a 2

Page 27: Lezione 22 (7 maggio 2012)

011111 Segno: positivo (0) Modulo del numero: si ottiene facendo il complemento a 2 di: 1 1 1 1 1 0 0 0 0 1 1

Quindi: risultato = +110 che non è ciò che ci aspettavamo

Soluzioni degli esercizi

510 = 0001012 su n = 6 bit 2810= 0111002 su n = 6 bit

- 510 = 1110112 su n = 6 bit - 2810 = 1001002 su n = 6 bit

Soluzioni degli esercizi

Somma di numeri in complemento a 2

[-5] 1 1 1 0 1 1 + [-28] 1 0 0 1 0 0 (1 )0 1 1 1 1 1 rip 1 0 overflow

Page 28: Lezione 22 (7 maggio 2012)

Conversioni binario-decimale e decimale-binario 1. Si convertano in decimale i seguenti numeri

325 = 2 5 + 2 = 12 334 = 3 4 + 3 = 15

1233 = 1 9 + 2 3 + 3 = 18 32016 = 3 216 + 2 36 + 1 = 721

2. Si convertano i seguenti numeri decimali in base 5

102310 1023=5 = 204; resto = 3 204=5 = 40; resto = 4 40=5 = 8; resto = 0 8=5 = 1; resto = 3 1=5 = 0; resto = 1

La soluzione e 130435

Page 29: Lezione 22 (7 maggio 2012)

3. Si convertino in binario i seguenti numeri decimali:

3210 = 1000002 6410 = 10000002

Page 30: Lezione 22 (7 maggio 2012)

75310:

Numero Cifra 753/2=376 1 376/2=188 0 188/2=94 0 94/2= 47 0 47/2=23 1 23/2=11 1 11/2=5 1 5/2=2 1 2/2=1 0 1/2=0 1

La soluzione e 10111100012.

Page 31: Lezione 22 (7 maggio 2012)

Si convertino in decimale i seguenti numeri binari: 100101011001102 Cifra Operazione Numero 1 1 1 0 1*2+0 2 0 2*2+0 4 1 4*2+1 9 0 9*2+0 18 1 18*2+1 37 0 37*2+0 74 1 74*2+1 149 1 149*2+1 299 0 299*2+0 598 0 598*2+0 1196 1 1196*2+1 2393 1 2393*2+1 4787 0 4787*2 9574

Page 32: Lezione 22 (7 maggio 2012)

1) Convertire i numeri decimali 335 e 564 in base 2, in base 8 e in base 16 mostrando il risultato e tutti i passaggi svolti.

Soluzione: Si consideri 335. Per la conversione in base 2 si ha: Divisioni Resti 335/2 = N0 = 167 R0 = 1 N0/2 = N1 = 83 R1 = 1 N1/2 = N2 = 41 R2 = 1 N2/2 = N3 = 20 R3 = 1 N3/2 = N4 = 10 R4 = 0 N4/2 = N5 = 5 R5 = 0 N5/2 = N6 = 2 R6 = 1 N6/2 = N7 = 1 R7 = 0 N7/2 = N8 = 0 R8 = 1

Page 33: Lezione 22 (7 maggio 2012)

Pertanto risulta: (335)10 = (101001111)2. Per la conversione in base 8 si ha:

Divisioni Resti 335/8 = N0= 41 R0 = 7 N0/8 = N1 = 5 R1 = 1 N1/8 = N2 = 0 R2 = 5

Il risultato è: (335)10 = (517)8. Per la conversione in base 16: Divisioni Resti 335/16 => N0 = 20 R0 = 15 N0/16 => N1 = 1 R1 = 4 N1/16 => N2 = 0 R2 = 1

Il risultato è: (335)10 = (14F)16

Page 34: Lezione 22 (7 maggio 2012)

Si consideri ora 564. Per la conversione in base 2 si ha:

Divisioni Resti 564/2 = N0 = 282 R0 = 0 N0/2 = N1 = 141 R1 = 0 N1/2 = N2 = 70 R2 = 1 N2/2 = N3 = 35 R3 = 0 N3/2 = N4 = 17 R4 = 1 N4/2 = N5 = 8 R5 = 1 N5/2 = N6 = 4 R6 = 0 N6/2 = N7 = 2 R7 = 0 N7/2 = N8 = 1 R8 = 0 N8/2 = N9 = 0 R9 =1\

Page 35: Lezione 22 (7 maggio 2012)

Pertanto risulta: (564)10 = (1000110100)2. Conversione in base 8:

Divisioni Resti 564/8 = N0 = 70 R0 = 4 N0/8 = N1 = 8 R1 = 6 N1/8 = N2 = 1 R2 = 0 N2/8 = N3 = 0 R3 = 1

ù Il risultato è: (564)10 = (1064)8. Conversione in base 16:

Divisioni Resti 564/16 = N0 = 35 R0 = 4 N0/16 = N1 = 2 R1 = 3 N1/16 = N2 = 0 R2 = 2

Il risultato è: (564)10 = (234)16