Codifica dei Dati

19
Codifica dei Dati Idea: vogliamo rappresentare dati eterogenei utilizzando un linguaggio che l’elaboratore puo’ facilmente manipolare Essenzialmente vogliamo costruire una codifica tra linguaggi Utilizzamo codifica binaria per le seguenti ragioni un alfabeto con due soli simboli corrisponde al linguaggio di una macchina basata su circuiti elettronici riduce l’errore nella rappresentazione dell’informazione Il numero di simboli per rappresentare numeri cresce in modo logaritmico con il numero: per rappresentare N occorrono in fatti simboli N 2 log ~

description

Codifica dei Dati. Idea: vogliamo rappresentare dati eterogenei utilizzando un linguaggio che l’elaboratore puo’ facilmente manipolare Essenzialmente vogliamo costruire una codifica tra linguaggi Utilizzamo codifica binaria per le seguenti ragioni - PowerPoint PPT Presentation

Transcript of Codifica dei Dati

Page 1: Codifica dei Dati

Codifica dei Dati Idea: vogliamo rappresentare dati eterogenei

utilizzando un linguaggio che l’elaboratore puo’ facilmente manipolare

Essenzialmente vogliamo costruire una codifica tra linguaggi

Utilizzamo codifica binaria per le seguenti ragioni un alfabeto con due soli simboli corrisponde al

linguaggio di una macchina basata su circuiti elettronici riduce l’errore nella rappresentazione dell’informazione Il numero di simboli per rappresentare numeri cresce in

modo logaritmico con il numero: per rappresentare N occorrono in fatti simboli

N2log~

Page 2: Codifica dei Dati

Vari tipi di codifiche La rappresentazione usuale dei numeri

e’ quella posizionale decimale dove si utilizzano 10 caratteri Alfabeto: 0…9 Si ragiona in base 10.

Es. 19= 1*10+9*(10**0) Operazioni aritmetiche:

Le tabelline delle elementari…(riporto ecc)

Page 3: Codifica dei Dati

Altre possibili rappresentazioni: Unaria: una barretta per unita’

Ad es: IIIIIIIIIIIIII rappresenta 15!!!

Numeri Romani con multipli di 5: Alfabeto: I V X L C D (500) M (1000) Si minimizza numero di simboli ad es:

I II III IV V …. XL (40) …. MCCLXXI (1271)…. Problema con numeri > 4000:

Ad es. MMMMMMMMMMMM… Operazioni? Abaco!!

Page 4: Codifica dei Dati

Codifica in base N La generalizzazione della codifica

decimale consiste nell’utilizzare un alfabeto con N cifre e ragionare quindi su base N Binaria: 2 cifre, potenze di 2 Ottale: 8 cifre, potenze di 8 Esadecimale: 16 cifre, potenze di 16 Base N: N cifre, potenze di N Numero di cifre per rappresentare un numero

)1(log mN

Page 5: Codifica dei Dati

Da numero a codifica Dato M la sua codifica posizionale

in base N si estrae utilizzando la divisione con resto come segue M = A1*N +B1 A1= A2*N + B2 …. Ak-1=Ak*N + Bk Cod(M,N) = Ak Bk … B1

Page 6: Codifica dei Dati

Esempio Base 2:

Cod(13,2) = 1 1 0 1 = 1*8+1*4+1 13 : 2 = 6 con resto 1 6 : 2 = 3 con resto 0 3 : 2 = 1 con resto 1

Base 8: Cod(13,8) = 1 5 = 1*8 + 5*1 13 : 8 = 1 con resto 5

Page 7: Codifica dei Dati

Esempio di cambio di base Per passare dalla base 2 alla base 8:

raggruppo gruppi di 3 bit! Per passare dalla base 8 alla base 2:

Espando cifre in gruppi di tre bit Esempio:

001 101 (binario) 1 5 (ottale)

Page 8: Codifica dei Dati

Codifica degli interi La codifica in binario dei numeri naturali permette di

utilizzare operazioni bit-a-bit per implementare operazioni aritmetiche quali la somma e la moltiplicazione

0 1 1 0 1 + 0 1 0 0 1 = 1 0 1 1 0

Vorremmo ottenere la stessa cosa nel caso di numeri interi!

Bit di segno Complemento a 1 e complemento a 2

Page 9: Codifica dei Dati

Bit di segno Bit di segno: fissiamo il numero di cifre il primo

bit a sinistra identifica il segno Su un byte (8 bit):

00000001 = 1 10000001 = -1

Algoritmo per la somma? Occorre una analisi dei possibili casi a seconda del

segno degli operandi non si riduce in modo semplice ad operazioni bit-a-

bit, peccato!

Page 10: Codifica dei Dati

Complemento a 1 Su K bit

il primo a sinistra identifica il segno il valore assoluto viene rappresentato invertito dopo

aver negato i singoli bit Es. 00000010 = 2 mentre 11111101 = -2

Somma bit a bit? Funziona quasi sempre

Se operandi hanno segno negativo si ottiene il risultato decrementato di 1! (Es. –12 invece di –11)

Nota: zero ha due rappresentazioni: 00000000 e 11111111!

00110+ (+6)10101= (-5)11011 (-4)

11001+ (-6)11010= (-5)10011 (-12)

Page 11: Codifica dei Dati

Complemento a 2 Su K bit

il primo a sinistra identifica il segno il valore assoluto viene rappresentato invertito dopo

aver negato i singoli bit Infine si somma la costante 1 al modulo 00000010 = 2 11111110 = 11111101+1= -2

Page 12: Codifica dei Dati

Operazioni per rapp. in complemento a 2

Somma bit a bit? Funziona sempre

Nota: zero ha una sola rappresentazione: 00000000

11010+ (-6) dove 6=0110 1001 + 1 = 1010

11011= (-5) dove 5=0101 1010 + 1 = 1011

10101 (-11) dove11=1011 0100+1 = 0101

Page 13: Codifica dei Dati

Rappresentazione per eccesso a 2**(N-1)

Un’altra possibile rappresentazione di numeri interi consiste nel suddividere il range di valori rappresentabili su N bit in numeri positivi e numeri negativi: (**=elevamento a potenza)

Le codifiche da 0 a (2**N-1)-1 rappresentano i numeri negativi da –(2**(N-1)) a –1

2**(N-1) rappresenta lo zero

Le rimanenti codifiche rappresentano:i numeri positivi da +1 a +(2**(N-1))-1

Page 14: Codifica dei Dati

Codifica e decodifica Codifica di M:

Cod(M+2**(N-1),2)

Decodifica M: M=Cod(N,2) Dec(M)=N-2**(N-1)

Page 15: Codifica dei Dati

Esempio Per N=3 il range di valori –4…0…3

000 rappresenta –4 001 rappresenta –3 …. 010 rappresenta 0 … 111 rappresenta 3

Codifica/decodifica -3 = Cod(-3+4,2)=Cod(1,2)=001 3 = Cod(3+4,2)=Cod(7,2)=111 111=Cod(7,2) e quindi Dec(111)=7-4=3

Page 16: Codifica dei Dati

Numeri Razionali Utilizzando opportune convenzioni

possiamo pensare di rappresentare non solo interi ma anche razionali Virgola fissa: si fissa il numero di cifre della

parte decimale Virgola mobile: si rappresentano esponente

e mantissa (Virgola= notazione all’inglese!)

Page 17: Codifica dei Dati

Virgola fissa Fissiamo quante cifre intere e quante decimali

vogliamo rappresentare ed utilizziamo potenze di 2 sia positive che negative!

Ad esempio: se la cifra piu’ a destra rappresenta ½ (=2**-1):

10001 rappresenta 8.5 = 8 + ½ cioe’ va letto come: 1000.1 !!

Si rappresentano solo valori divisibili per potenze negative di 2 (occorre approssimare gli altri valori)

Page 18: Codifica dei Dati

Virgola Mobile Se vogliamo rappresentare sia numeri molto

piccoli che numeri molto grandi occorre utilizzare una rappresentazione in cui la virgola decimale varia a seconda del numero

Si usa una rappresentazione del tipo: Valore= 2**(+/- Esponente)+Mantissa La mantissa viene normalizzata per ottenere una

rappresentazione unica (varia tra 1 e ½). Cioe’ dobbiamo memorizzare su K bit le

informazioni su: Segno Esponente Mantissa

Page 19: Codifica dei Dati

Standard IEEE Precisione singola su 32 bit

1 bit di segno 8 di esponente (da -126 a +127) 23 di mantissa Si possono rappresentare valori fino a 2**(-150)

Precisione doppia su 64 bit 1 bit di segno 11 di esponente (da -1022 a +1023) 52 di mantissa Si possono rappresentare valori fino a 2**(-1075)