INFORMATICA GENERALE E BASI DI DATI PER ARCHIVI AUDIOVISIVI (PRIMO MODULO) Claudio Piciarelli A.A. 2013/2014 Lezione 1 La codifica dell’informazione Cos’è l’informatica? Dipende dai punti di vista… Per l’utente medio è l’uso quotidiano del computer Per l’ingegnere è una tecnologia Per l’informatico è una scienza Cos’è l’informatica? Informatica = INFORmazione autoMATICA L’informatica è quella scienza che studia come rappresentare, organizzare, manipolare l’informazione Non a caso il corso di laurea in informatica una volta si chiamava «scienze dell’informazione»! Dialogo realmente avvenuto: - In cosa ti sei laureato? - In scienze dell’informazione - Ah, allora fai il giornalista! Cos’è l’informazione? L’informazione è uno scambio di conoscenza Nell’ambito della Teoria dell’Informazione se ne dà una definizione probabilistica: un evento porta tanta informazione se è poco probabile «In questo momento al Polo Nord fa freddo» Probabilità molto alta poca informazione «In questo momento al Polo Nord ci sono esattamente -43,65 gradi» Probabilità bassa molta informazione Codifica dell’informazione Codificare l’informazione significa memorizzare un concetto astratto (l’informazione) su un supporto fisico (un pezzo di carta, la memoria di un computer…) Il numero 8 8 Informazione decodifica codifica Supporto fisico Codifica dell’informazione Duplice interpretazione Due 8 macchie di inchiostro nero di forma circolare su un pezzo di carta (supporto fisico) Il numero 8 (informazione codificata nel supporto fisico) Codifica dell’informazione La stessa informazione può essere codificata in modi diversi Il numero 8 8 Informazione VIII Supporto fisico Codifica dell’informazione E a volte lo stesso supporto può essere decodificato in modi diversi Il numero centoventitre virgola quattro zero uno, nella notazione italiana Il numero centoventitremila quattrocento uno, nella notazione anglosassone Informazione 123,401 Supporto fisico Codifica dei numeri decimali Occorre innanzitutto un insieme di simboli. Questo insieme è genericamente detto alfabeto A = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } Serve inoltre un’opportuna regola di codifica, nel nostro caso la notazione posizionale: l’ultima cifra a destra rappresenta le unità e pesa 1, la penultima rappresenta le decine e pesa 10, la terzultima pesa 10 , la quartultima 10 , ecc. Notazione posizionale 427 Quattro centinaia, due decine e sette unità. Ovvero: 4 ∗ 10 + 2 ∗ 10 + 7 ∗ 10 Più in generale, dato un numero decimale di n cifre … il suo valore è ∗ 10 + ∗ 10 + … + ∗ 10 + ∗ 10 (Nota: ricordatevi che qualsiasi numero diverso da 0, se elevato alla 0, dà 1) Numeri in base decimale Con queste regole è facile contare in decimale. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 … (nota: in questa lezione ci limitiamo a considerare i numeri naturali) Numeri in altre basi Cosa succede se cambiamo l’alfabeto? Ad esempio se usassimo solo questi simboli: A = { 0, 1, 2, 3, 4, 5, 6, 7 } Si parla in questo caso di numeri in base ottale (la «base» è il numero di simboli nell’alfabeto). Usando la solita notazione posizionale, possiamo contare in base ottale! Numeri in base ottale 0, 1, 2, 3, 4, 5, 6, 7, 0 2 3 4 5 6 7 10, 11, 12, 13, 14, 15, 16, 17, 8 1 9 10 11 12 13 14 15 20, 21, 22, 23, 24, 25, 26, 27, 16 17 18 19 20 21 22 23 … Quelli in nero sono i numeri in base ottale, quelli in rosso in base decimale. Per evitare confusione, conviene scrivere i numeri indicando esplicitamente la base, come ad es. numero 11 = 9 base (leggi: uno uno in base 8 equivale a nove in base 10) Conversione da ottale a decimale Si usa la solita regola della notazione posizionale, avendo cura di usare la base corretta! 147 = 1 ∗ 8 + 4 ∗ 8 + 7 = 64 + 32 + 7 = 103 Formula aggiornata: dato un numero di n cifre in base B … il suo valore in base decimale è: ∗ + ∗ + … + ∗ + ∗ Base esadecimale A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F } 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 0 1 2 3 4 5 6 10 11 12 13 14 15 8 9 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 1C, 1D, 1E, 1F 16 7 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 20, 21, 22, 23, 24, 25, 26, 27, 28, 19, 2A, 2B, 2C, 2D, 2E, 2F 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 Conversione da esadecimale a dec. Sappiamo già che = 10 , = 11 , … , = 15 Si usa la solita regola della notazione posizionale 80 = ∗ 16 + 8 ∗ 16 + ∗ 16 + 0 = 16 ∗ 4096 + 8 ∗ 256 + 11 ∗ 16 = 67760 Base boh A = { , , } (in realtà è una banalissima base ternaria) Quanto vale il numero ? Soluzione: Se = 0, = 1, = 2, allora = 1 ∗ 3 + 0 ∗ 3 + 2 ∗ 3 + 2 ∗ 3 = 27 + 6 + 2 = 35 Conversioni dalla base decimale Abbiamo visto come si può convertire facilmente un numero da una base arbitraria B ad una decimale Come è possibile fare l’inverso? Divido il numero decimale per B Il RESTO della divisione è l’ultima cifra Divido il QUOZIENTE per B Il RESTO della divisione è la penultima cifra Divido il QUOZIENTE per B Il RESTO della divisione è la terzultima cifra … (ripeto, finché il quoziente non è zero) Conversioni dalla base decimale Esempio: convertire 570 in base ottale 570 / 8 = 71 col resto di 2 71 / 8 = 8 col resto di 7 8 / 8 = 1 col resto di 0 1 / 8 = 0 col resto di 1 Per cui 570 = 1072 Quanti numeri? Quanti numeri posso rappresentare in base B usando al massimo k cifre? Risposta: numeri (da 0 a − 1) Esempio: se B=10 e k=3, posso rappresentare 10 = 1000 numeri diversi, quelli da 0 a 999 Altro esempio: B=16, k=2, posso rappresentare 16 = 256 numeri diversi, da 0 a La base binaria E’ la base più importante dell’informatica A = { 0, 1 } Contiamo in base binaria: 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, … Conversioni: 11001 = 1 ∗ 2 + 1 ∗ 2 + 1 = 25 Conversione binario - decimale … Ogni cifra corrisponde ad una potenza di due, partendo da 2 per la cifra più a destra Basta sommare le potenze in corrispondenza di un 1 nel numero binario 2 = 256 2! = 128 2 = 64 2" = 32 2 = 16 101101001 256 + 64 + 32 + 8 + 1 2 = 8 2 = 4 2 = 2 2 = 1 Conversione decimale - binario Si usa il solito metodo Esempio: convertire 81 in base binaria 81 / 2 = 40 col resto di 1 40 / 2 = 20 col resto di 0 20 / 2 = 10 col resto di 0 10 / 2 = 5 col resto di 0 5 / 2 = 2 col resto di 1 2 / 2 = 1 col resto di 0 1 / 2 = 0 col resto di 1 Quindi 81 = 1010001 La base binaria Ora potete finalmente capire questa battuta da informatici: Al mondo ci sono solo 10 categorie di persone: quelli che conoscono la notazione binaria, e quelli che non la conoscono. La base binaria Perché è così importante? L’unità minima di informazione in un computer è il bit, che può assumere solo due valori: 0 e 1. Quindi qualsiasi dato, qualsiasi programma, qualsiasi contenuto multimediale, ecc. memorizzato in un computer non è altro che una lunga sequenza di 0 e 1, ovvero un numero binario! Bit e byte Un byte è un insieme di 8 bit. Quanti valori diversi può contenere? Risposta: 2 = 256 Da 0 a 11111111 Ovvero 255 Multipli del bit 8 bit = 1 byte 2 byte = 1 KB (kilobyte) 2 byte = 1 MB (megabyte) 2 byte = 1 GB (gigabyte) 2 byte = 1 TB (terabyte) 2" byte = 1 PB (petabyte) 2 byte = 1 EB (exabyte) 2! byte = 1 ZB (zettabyte) 2 byte = 1 YB (yottabyte) (1024 byte) (1024 KB) (1024 MB) (1024 GB) (1024 TB) (1024 PB) (1024 EB) (1024 ZB) (non del tutto esatto, stando al sistema metrico internazionale. Ma si tratta di cavilli…) Somme tra numeri binari Come per ogni altra base 0+0 = 0, 0+1 = 1, 1+0 = 1 1+1 = 0 col riporto di 1 1 1 1 1 1 1 1 1 001101010001101 + 010110100010011 = 100011110100000 Rappresentazione dei numeri negativi Come posso codificare anche i numeri negativi? Due possibili approcci: Modulo e segno Complemento a due Modulo e segno Facciamo l’esempio di un byte (8 bit) Il bit più significativo (quello più a sinistra) codifica il segno: 0 significa +, 1 significa – Gli altri 7 bit codificano il modulo del numero Esempio: 00011011 = 27 10011011 = -27 Modulo e segno Intervallo dei numeri rappresentabili con modulo e segno: da 11111111 a 01111111 (da -127 a Binario Decimale +127) 00000000 0 Problema: doppia rappresentazione 00000001 1 00000010 2 dello zero! … 10000000 =-0 00000000 = +0 Problema: le somme non funzionano… 01111110 01111111 10000000 10000001 10000010 … 11111101 11111110 11111111 126 127 -0 -1 -2 -125 -126 -127 Complemento a due Per rappresentare il numero –n… Si parte dalla rappresentazione binaria di +n Si fa il complemento a uno (ogni zero diventa uno, e ogni uno diventa zero) Si somma 1. Esempio su un byte: 27 = 000011011 complemento: 111100100 Questa è la rappresentazione Sommo 1: 111100101 di -27 in complemento a due Complemento a due Binario 00000000 00000001 00000010 … 01111110 01111111 10000000 10000001 10000010 … 11111101 11111110 11111111 Decimale 0 1 2 126 127 -128 -127 -126 -3 -2 -1 Tutti i numeri negativi si riconoscono immediatamente perché iniziano con un 1 Nessuna doppia rappresentazione dello 0 Intervallo: da -128 a +127 Grande vantaggio: le somme funzionano anche con i numeri negativi! Attenzione a non calcolare 127+1… otterreste un overflow Somme in complemento a due -15 + 7 11110001 + 00000111 = 11111000 Per trasformare un numero in complemento a due in decimale, si fa nuovamente il complemento a uno e si somma 1. Si converte il numero risultante in decimale e si cambia di segno. Quanto vale 11111000 ? 00000111 (complemento a uno) 00001000 (sommo 1) Il risultato è -8 Ambiguità Quanto vale in decimale il numero 11111111 ? Risposta: dipende Se è un numero senza segno, vale 255 Se è un numero in complemento a due, vale −1 Questa ambiguità è una delle principali cause di disastri informatici! (assieme agli overflow visti prima) Codifica di dati non numerici Se per un computer tutto è un numero binario, come posso codificare dati non numerici? Divido i dati da codificare in due gruppi, che codifico rispettivamente con uno 0 e con un 1 Ripeto finché non ho definito una codifica per ciascun elemento. Esempio Codificare i giorni della settimana Codifica dei dati non numerici Quante cifre binarie mi servono? Sappiamo già che con k cifre possiamo rappresentare 2 numeri binari differenti Quindi, se il numero di oggetti da codificare è n, dobbiamo avere che 2 ≥ $ Ovvero % ≥ log $ Codifica alfanumerica Per codificare i singoli caratteri di un testo scritto occorrono almeno Tutte le lettere dell’alfabeto minuscole Tutte le lettere dell’alfabeto maiuscole Le 10 cifre decimali I segni di interpunzione In totale circa 100 elementi. Servono quindi almeno 7 bit per carattere (2! = 128) Codifica alfanumerica Codifica ASCII – 7 bit (128 caratteri) Codifica ASCII estesa – 8 bit (256 caratteri) Usata per rappresentare caratteri non presenti nella codifica ASCII standard, come le lettere accentate. Purtroppo la codifica estesa differisce da Paese a Paese! Codifica UNICODE – 21 bit (circa 1 milione di caratteri). Sembra tanto, ma UNICODE punta a codificare tutti i simboli di tutte le lingue. Si pensi ad esempio al cinese… Tabella ASCII