Codici e informazioni Informazione è un qualunque insieme di segnali che condizionano l’evoluzione di un sistema. Nel mondo dell’informatica per informazione intenderemo, in modo più restrittivo, tutto ciò che può essere rappresentato tramite opportune sequenze di simboli in un alfabeto prefissato. La scelta della rappresentazione dei dati deve consentire di gestire, elaborare e memorizzare le informazioni in modo agile. 1 Codici e informazioni Un codice C è un insieme di parole composte da simboli di un alfabeto (che chiameremo alfabeto supporto di C). La rappresentazione o codifica di un insieme di informazioni I in un dato codice C è una funzione f:IC, ossia è una legge che associa ad ogni informazione che si intende rappresentare una opportuna parola del codice C. In modo analogo la decodifica è una funzione g avente per dominio C e per codominio I. 2 Codici e informazioni °Alfabeto °C: insieme di parole sull’alfabeto °I: insieme di informazioni (parole di C) °Funzioni di codifica e decodifica tra insiemi diversi di informazioni °Composizione di codifica e decodifica: l’identità °Codifica (o decodifica) non ambigua: iniettività 3 Esempi Codice in chiaro (codice in cui non vi è l’intenzione di proteggere il contenuto del messaggio) = 26 lettere dell’alfabeto I = insieme degli animali domestici C=insieme delle parole del vocabolario che corrispondono ai vari animali domestici. Codice non in chiaro-Cifrario di Cesare Funzione di codifica: f:ii+3(mod 26), i=0,1,…,25 dove al numero 0 corrisponde la lettera a, al numero 1 la lettera b.. In base a tale cifrario, è facile verificare che “babbo” è codificato come “edeer”. 4 Alfabeto, sintassi, semantica • Alfabeto dei simboli • Regole di composizione (sintassi) che definiscono la sequenza di configurazioni ammissibili( vanno a creare I) • Codice (semantica): insieme di regole che ad ogni configurazione ammissibile associa un’entità di informazione • Lo stesso alfabeto può essere usato con codici diversi. 5 Numeri naturali Consideriamo un particolare tipo di informazione, quella che specifica il valore di un numero naturale: 0,1,2,3,4….. Attenzione: analogamente agli altri tipi di informazione va fatta una distinzione tra il concetto o significato di numero (numero) e la sua rappresentazione o codifica in un qualche codice (numerale). 6 Numeri e numerali • Numero: entità astratta • Numerale: stringa di caratteri che rappresenta un numero in un dato sistema di numerazione • Lo stesso numero è rappresentato da numerali diversi in diversi sistemi. • Il numero di caratteri del numerale determina l’intervallo dei numeri rappresentabili. • Un numerale rappresenta un numero solo se si specifica un sistema di numerazione • Lo stesso numerale rappresenta diversi numeri in diversi sistemi. 7 Rappresentazioni dei numeri • posizionali: ogni cifra ha un peso • le più usate: decimale, binaria, esadecimale, ottale • non posizionale: romana, italiano… 8 Posizionale in Base 10 °Alfabeto decimale: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} °esempio: 3271 = (3x103) + (2x102) + (7x101) + (1x100) Ad ogni simbolo è associato un peso diverso a seconda della posizione che occupa. 9 Numeri: la notazione posizionale °Base B (è un numero) => ho B simboli: • Base 10 (Decimale): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Base 2 (Binaria): 0, 1 °Rappresentazione di numeri: • Un numero naturale può essere espresso con una sequenza di m cifre ci in base b dove le cifre denotano un insieme di b simboli che corrispondono ai primi b numeri naturali. m 1 i • Vale la relazione N= ci b i 0 Esempio 1011010 = 1x26 + 0x25 + 1x24 + 1x23 + 0x22 + 1x2 + 0x1 = 64 + 16 + 8 + 2 = 90 10 Conversione da una rappresentazione a un’altra Dato un numero rappresentato in base a, come è possibile ottenere la sua rappresentaziuone in base b? L’algoritmo per effettuare il cambiamento di base dalla base a alla base b consiste semplicemente nel dividere il numero N espresso in base a per b finchè il quoziente non risulti uguale a 0. I resti ottenuti (ovviamente compresi tra 0 e b-1) costituiscono le cifre del numero N codificato in base b. Attenzione: rappresentazione e numero sono due cose diverse…. 11 Il principio di funzionamento di un computer si basa sulla logica binaria. Per comprenderne l'idea di base, possiamo pensare a un interruttore, che può essere aperto o chiuso, o ad una scheda che può essere forata o meno in un punto, o ad un suono che può essere presente o no, o ancora ad una riflessione ottica che può verificarsi o meno. 12 Bit Ciò che accomuna tutti questi fenomeni è la caratteristica di poter assumere solamente due stati: 0 = aperto 1 = chiuso Questa variabile che assume solo due stati (0 e 1) si chiama bit ("binary digit", cifra binaria) ed è l'unità minima di informazione e la base dell'algebra binaria. 13 Byte Un computer "ragiona" unicamente interpretando gruppi di bit, cioè comandi rappresentati da sequenze di "uno" e di "zero" (per esempio, 00101100). Convenzionalmente, 8 bit costituiscono 1 byte. 14 Numerazione binaria Affiancando un sufficiente numero di bit è possibile rappresentare qualunque numero. Ogni posizione rappresenta una potenza crescente di 2: 27 26 25 24 23 22 21 20 1 0 0 1 0 1 1 0 = 128*1 + 64*0 + 32*0 + 16*1 + 8*0 + 4*1 + 2*1 + 1*0 = 150 decimale Questo procedimento consente di convertire un numero binario in decimale 15 Numerazione binaria Il procedimento inverso (da decimale a binario), si ottiene dividendo i resti per le potenze di 2: 150/128=1 r:22/64=0 r:22/32=0 r:22/16=1 r:6/8=0 r:6/4=1 Gli stessi principi valgono per qualunque BASE di numerazione. r:2/2=1 r:0 16 Ancora conversione In modo più semplice, è sufficiente dividere il numero di partenza per la base di destinazione, tante volte finché il quoziente si annulla. Il resto delle divisioni letto in senso inverso è il numero nella base di destinazione. Ad es: 810 (?)2 810=10002 17 Numerazione ottale In ambito informatico rivestono particolare rilevanza altre due numerazioni: quella ottale, che utilizza solo 8 cifre (da 0 a 7), 84 83 82 81 80 3 7 0 4 5 che in decimale è = 4096*3+512*7+64*0+8*4+5 = 15909 18 …ed esadecimale E la numerazione esadecimale, che utilizza 16 cifre (da 0 a 9 e le lettere da A a F) che corrispondono ai valori da 0 a 15 decimali. 163 2 162 5 161 E 160 F che in decimale è = 4096*2+256*5+16*14+15 = 9711 Per la conversione inversa da decimale a ottale (o esadecimale) si utilizza lo stesso metodo di divisione dei resti visto per la numerazione binaria. 19 Confronti 20 CONVERSIONE TRA BASI Essendo le basi 8 e 16 potenze di 2, esiste un meccanismo semplice di conversione tra esse e la base 2: Per i numeri ottali è sufficiente suddividere il numero binario in gruppi di 3 bit (a partire da destra) e convertire ogni singolo gruppo nel corrispondente ottale: 1 0 1 1 1 0 1 0 0 = 5 6 4 ottale Per i numeri esadecimali è sufficiente suddividere il numero binario in gruppi di 4 bit (a partire da destra) e convertire ogni gruppo nel corrispondente esadecimale: 1 0 1 0 0 0 1 1 = A 3 esadecimale 21 Quali codici esistono per i computer? °Binario…. bit °ASCII caratteri °Esadecimale byte... I codici che usiamo sono a lunghezza fissa: numero fisso di “posizioni” Tutte le posizioni vengono usate Perché? Discutiamone 22 Codifica binaria dell’informazione • Con parole binarie composte da k bit è possibile codificare 2K oggetti diversi. • Passando da una parola binaria a k bit ad una a k+1 bit si raddoppia il numero di oggetti rappresentabili (2K+1). •Raddoppiando il numero di bit (da k a 2k) il numero di oggetti rappresentabili aumenta esponenzialmente (22k). •Per codificare N oggetti servono circa log2N bit. 23 Che cosa facciamo con i numeri? ° Le solite cose! • • • • • Addizioni Sottrazione Moltiplcazioni Divisioni Confronti ° Esempio: 10 + 7 = 17 + 1 1 1 0 1 0 0 1 1 1 ------------------------1 0 0 0 1 • Se ho numeri binari…. circuito 24 Che base usare? °Decimale? Va bene per noi °Esadecimale? Rappresentazione compatta di numeri binari • Terribile da usare sulla carta °Binaria: quella che usano i computer impareremo come un computer fa +,-,*,/ • Per un computer, i numeri sono sempre binari • Comunque siano scritti: 3210 == 0x20 == 1000002 • usiamo “ten”, “hex”, “two” se ci sono confusioni 25 Ci sono dei limiti? °I bit possono rappresentare tutto! °Caratteri? • 26 lettere => 5 bits • minuscole/maiuscole + punteggiatura => 7 bits (in 8) (“ascii”) • Unicode: codice standard che copre tutte le lingue del mondo (i simboli) => 16 bits °Valori logici? 0 -> Falso, 1 => Vero °Ma: N bits => si possono rappresentare solo 2N cose 26 Come rappresento I numeri negativi? °Fino ad ora, numeri senza segno °Soluzione ovvia: il bit più a sinistra rappresenta il segno! • 0 => +, 1 => • Gli altri: il valore assoluto °MIPS usa interi a 32-bit. +1ten sarebbe: 0000 0000 0000 0000 0000 0000 0000 0001 °E - 1ten invece: 1000 0000 0000 0000 0000 0000 0000 0001 27 Problemi… °Per sommare (e fare altre operazioni) ho dei circuiti…. • A seconda del segno devo fare cose particolari… °Poi, due zero • 0x00000000 = +0ten • 0x80000000 = -0ten • utile? Cosa potrebbe significare? °Forse non è la rappresentazione più conveniente…. 28 Rappresentazione degli interi °Devo rappresentare positivi e negativi °Ho il problema del segno: °Soluzione semplice: aggiungo un bit per il segno • Problematiche le operazioni… complicate °Soluzioni alternative: • Complemento a 1 • Complemento a 2 • Le altre le vedremo in seguito… 29 riassunto delle domande a cui bisogna saper rispondere °conversione tra basi • perchè funziona in quel modo? °problema della rappresentazione dei numeri interi relativi: • complemento a 1 - Come funziona e perchè • complemento a 2 - Come funziona e perchè 30