La codifica dell informazione
Algoritmo Codifica dati e istruzioni descrizione della soluzione di problema scritta in modo da poter essere eseguita da un esecutore (eventualmente diverso dall autore dell algoritmo) sequenza di istruzioni che operano su dati. Programma algoritmo scritto in modo da poter essere eseguito da un calcolatore (esecutore automatico) Per scrivere un programma è necessario rappresentare istruzioni e dati in un formato tale che l esecutore automatico sia capace di memorizzare e manipolare.
Codifica dati e istruzioni Alfabeto dei simboli cifre 0, 1,, 9, separatore decimale (, ), separatore delle migliaia (. ) e segni positivo ( + ) o negativo ( ). Regole di composizione (sintassi), che definiscono le successioni ben formate 1.234,5 è la rappresentazione di un numero; 1,23,45 non lo è. Codice (semantica: interpretazione posizionale) 1.234,5 = 1 10 3 + 2 10 2 + 3 10 1 + 4 10 0 + 5 10 1 1,23,45 =?? Lo stesso alfabeto può essere utilizzato con codici diversi: 123,456 = 1 10 2 + 2 10 1 + 3 10 0 + 4 10 1 + 5 10 2 + 6 10 3, [IT] 123,456 = 1 10 5 + 2 10 4 + 3 10 3 + 4 10 2 + 5 10 1 + 6 10 0, [UK]
Codifica Binaria Alfabeto binario: : usiamo dispositivi con solo due stati (0,1( 0,1) Problema: assegnare un codice binario univoco a tutti gli oggetti compresi in un insieme predefinito (e.g. studenti) Quanti oggetti posso codificare con k bit: 1 bit 2 stati (0, 1) 2 oggetti (e.g. Vero/Falso) 2 bit 4 stati (00, 01, 10, 11) 4 oggetti 3 bit 8 stati (000, 001,, 111) 8 oggetti k bit 2 k stati 2 k oggetti Quanti bit mi servono per codificare N oggetti: N 2 k k log 2 N k = log 2 N (approssimato all intero superiore) Attenzione! ipotesi implicita: i codici hanno tutti la stessa lunghezza
Esempio di codifica binaria Problema: assegnare un codice binario univoco a tutti i giorni della settimana Giorni della settimana: N = 7 k log 2 7 k = 3 Con 3 bit possiamo ottenere 8 diverse configurazioni: Ne servono 7, quali utilizziamo? Quale configurazione associamo a quale giorno? Attenzione: ipotesi che i codici abbiano tutti la stessa lunghezza
I giorni della settimana in binario (1) Lunedì Martedì Domenica Mercoledì Sabato Giovedì Venerdì Lunedì Giovedì Martedì Mercoledì Domenica Sabato Venerdì 0 1 Lunedì Martedì Giovedì Mercoledì Sabato Venerdì Domenica 00 01 10 11 Lunedì Martedì Mercoledì Giovedì Venerdì Sabato Domenica 000 001 010 011 100 101 110 111 1 bit 2 gruppi 2 bit 4 gruppi 3 bit 8 gruppi
I giorni della settimana in binario (2) Lunedì Martedì Domenica Mercoledì Sabato Giovedì Venerdì Sabato Giovedì Martedì Domenica Lunedì Mercoledì Venerdì 0 1 Giovedì Martedì Sabato Mercoledì Domenica Lunedì Venerdì 00 01 10 11 Giovedì Sabato Martedì Domenica Mercoledì Venerdì Lunedì 000 001 010 011 100 101 110 111 1 bit 2 gruppi 2 bit 4 gruppi 3 bit 8 gruppi
Codifica binaria dei caratteri Quanti sono gli oggetti compresi nell insieme? 26 lettere maiuscole + 26 minuscole 52 10 cifre Circa 30 segni d interpunzione Circa 30 caratteri di controllo (CANC,ESC,INVIO,CTRL,ALT ) circa 120 oggetti complessivi k = log 2 120 = 7 Codice ASCII: utilizza 7 bit e quindi può rappresentare al massimo 2 7 =128 caratteri Con 8 bit (= byte) rappresento 256=2 8 caratteri (ASCII ext.) Oggi si usano codici più estesi: UNICODE 2 16 = 65535 per rappresentare anche i caratteri delle lingue orientali
ASCII su 7 bit 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 010 sp! " # $ % & ' ( ) * +, -. / 011 0 1 2 3 4 5 6 7 8 9 : ; < = >? 100 @ A B C D E F G H I J K L M N O 101 P Q R S T U V W X Y Z [ \ ] ^ _ 110 ` a b c d e f g h I j k l m n o 111 p q r s t u v w x Y z { } ~ canc
Bit, Byte, KiloByte, MegaByte, Bit = solo due stati, 0 oppure 1. Byte = 8 bit, quindi 2 8 = 256 stati KiloByte [KB] = 2 10 Byte = 1024 Byte ~ 10 3 Byte MegaByte [MB] = 2 20 Byte = 1'048'576 Byte ~ 10 6 Byte GigaByte [GB] = 2 30 Byte ~ 10 9 Byte TeraByte [TB] = 2 Byte ~ 10 Byte PetaByte [PB] = 2 Byte ~ 10 Byte ExaByte [EB] = 2 Byte ~ 10 Byte Byte (diff.2%) Byte (differenza 10%)
Lo standard IEC per i prefissi binari Grandezza Nome Simbolo Dimensione SI Diff. % Kilo binario Kibi Ki 2 10 1'024 10 3 2.40% Mega binario Mebi Mi (2 10 ) 2 1'048'576 (10 3 ) 2 4.86% Giga binario Gibi Gi (2 10 ) 3 1'073'741'824 (10 3 ) 3 7.37% Tera binario Tebi Ti (2 10 ) 4 1'099'511'627'776 (10 3 ) 4 9.95% Peta binario Pebi Pi (2 10 ) 5 1'125'899'906'842'624 (10 3 ) 5 12.59% Exa binario Exbi Ei (2 10 ) 6 1'152'921'504'606'846'976 (10 3 ) 6 15.29% Zetta binario Zebi Zi (2 10 ) 7 1'180'591'620'717'411'303'424 (10 3 ) 7 18.06% Yotta binario Yobi Yi (2 10 ) 8 1'208'925'819'614'629'174'706'176 (10 3 ) 8 20.89% Usando questi prefissi si può risolvere l ambiguità capacità di un disco fisso: 120 GB = 111.76 GiB, capacità di un floppy: 1.406 MiB = 1.475 MB
La codifica delle istruzioni Si segue lo schema presentato per i caratteri alfanumerici: quali e quante sono le istruzioni da codificare? qual è la lunghezza delle successioni di bit da utilizzare? qual è la corrispondenza tra istruzioni e successioni di bit? Istruzioni aritmetico-logiche Istruzioni per il trasferimento dati Istruzioni di controllo Codice Istruzione Codice Istruzione Codice Istruzione 0111 1100 ADD 1110 1000 LOAD 0100 1001 IF_EQ 0111 1101 SUB 1111 1000 STORE 0100 1000 GOTO 0111 1110 AND 0100 1100 RETURN
Oltre al codice operativo è necessario far riferimento ai dati necessari per completare l esecuzione dell istruzione istruzione, e.g. addizione: è necessario che sia specificato (anche implicitamente) dove leggere i due operandi da sommare e dove scrivere il risultato; il numero dei dati da specificare è variabile,, in funzione delle istruzioni.
Rappresentazione dei numeri naturali La rappresentazione dei numeri naturali (0,1,2, ) usata dai latini o dai greci (I,II,III, ) era del tutto convenzionale, mentre quella da noi usata (trasmessa dagli arabi) in base dieci (o decimale) si basa su un teorema fondamentale dell aritmetica. Ciascun numero naturale (0,1,2, ) può essere rappresentato da una ed una sola successione finita di bit, detta rappresentazione binaria o in base due. Questa possibilità è conseguenza di un importante Teorema dell Aritmetica, lo stesso che consente l usuale rappresentazione decimale dei numeri naturali, detta anche rappresentazione in base 10. Questo Teorema è alla base anche della rappresentazioni dei naturali in base due (binaria) così come di altre basi (ottale, esadecimale, ecc.) Per capire questo importante Teorema della rappresentazione dei numeri naturali, occorre distinguere tra: i numeri naturali, i loro nomi-concetti e le loro rappresentazioni: queste ultime possono cambiare a seconda del supporto (base) scelto
Teorema: Rappresentazione dei numeri naturali Scelto un numero naturale N (detto base) maggiore o uguale a 2, ogni numero naturale M diverso da 0 può essere rappresentato in una sola maniera come somma finita di potenze decrescenti (k, k-1, ) di N moltiplicate per coefficienti (C k, C k-1, C 0 ) minori di M. Ossia: scelta una base N 2, per ogni numero naturale M 0, esiste un solo k ed una sola k-pla di numeri (coefficienti) C k, C k-1, C 0 minori di N e con C k 0, tale che: M = (C( k x N k ) + (C k-1 x N k-1 ) + + (C 0 x N 0 ) Esempi: se la base N= 10, ventitrè => (2( x 10 1 ) + (3( x 10 0 ) => 23 se la base N= 2, ventitrè => (1( x 2 4 ) + (0( x 2 3 ) + (1( x 2 2 ) + + (1( x 2 1 ) + (1( x 2 0 ) => 10111
Esempio 1: Rappresentazione dei numeri naturali Assumiamo: base N=10 ed M = duemilacentootto - La più grande potenza di 10 presente in N è la terza potenza di 10, cioè 10 3 ; questa compare ben 2 volte; otteniamo quindi il primo termine 10 3 x 2 (= 2000). - Togliendo (10 3 x 2) da N, in quel che rimane (centootto), la seconda potenza di 10, ossia 10 2 compare 1 volta, quindi otteniamo il secondo termine 10 2 x 1 (=100) - Togliendo (10 3 x 2)+(10 2 x 1) da N, in quel che rimane (otto), la potenza prima di 10, ossia 10 1,compare 0 volte, quindi otteniamo il terzo termine 10 1 x 0 (=0) - Togliendo infine (10 3 x 2)+(10 2 x 1)+(10 1 x 0) da N, in quel che rimane (otto), la potenza nulla di 10, ossia 10 0 (=1) compare 8 volte, quindi otteniamo il quarto ed ultimo termine 10 0 x 8 (=8) Pertanto, duemilacentootto in base 10 è rappresentato da: (10 3 x 2)+(10 2 x 1)+(10 1 x 0)+(10 0 x8) = 2108 dieci
Esempio 2: Rappresentazione dei numeri naturali Assumiamo: base N=2 ed M = ventitrè - La più grande potenza di 2 presente in N è la quarta potenza di 2, cioè 2 4; questa compare 1 sola volta; otteniamo quindi il primo termine 2 4 x 1 (=16). - Togliendo (2 4 x 1) da N, in quel che rimane (sette), la terza potenza di 2, ossia 2 3 compare 0 volte, quindi otteniamo il secondo termine 2 3 x 0 (=0) - Togliendo (2 4 x 1)+(2 3 x 0) da N, in quel che rimane (sette), la seconda potenza di 2, ossia 2 2,compare 1 volta, quindi otteniamo il terzo termine 2 2 x 1 (=4) - Togliendo (2 4 x 1)+(2 3 x 0)+(2 2 x 0) da N, in quel che rimane (tre), la prima potenza di 2, ossia 2 1 (=2) compare 1 volte, quindi otteniamo il quarto termine 2 1 x 1(=2) - Infine, togliendo (2 4 x 1)+(2 3 x 0)+(2 2 x 0)+(2 1 x 1) da N, in quel che rimane (uno), la potenza nulla di 2, ossia 2 0 (=1) compare 1 volta, quindi otteniamo il quinto ed ultimo termine 2 0 x 1(=1) Pertanto, ventitrè in base 2 è rappresentato da: (2 4 x 1)+(2 3 x 0)+(2 2 x 1)+(2 1 x 1)+(2 0 x1) = 10111 due
Numeri naturali Fissata la base, il Teorema assicura l univocitl univocità della lettura (o interpretazione o de-codifica )) della sequenza di simboli (cifre) di cui si compone il numero dato Sistema di numerazione posizionale in base b N = c k c k 1 c 0 rappresenta c k b k + c k 1 b k 1 + + c 0 b 0 b=10 1101 dieci indica 1 10 3 + 1 10 2 + 0 10 + 1 10 0 b=2 =>1101 due indica 1 10 11 + 1 10 10 + 0 10 1 + 1 10 0 Conversione binario decimale basta scrivere il numero secondo la notazione posizionale utilizzando già il sistema decimale b=2 1101 due indica 1 2 3 + 1 2 2 + 0 2 + 1 2 0 = 13 dieci
Conversione binario decimale 101100 due = 1 dieci 2 5 dieci+ 0 dieci 2 4 dieci+ 1 dieci 2 3 dieci+ 1 dieci 2 2 dieci+ 0 dieci 2 1 dieci+ + 0 dieci 2 0 dieci = = 1 dieci 32 dieci + 0 dieci 16 dieci + 1 dieci 8 dieci + 1 dieci 4 dieci + 0 dieci 2 dieci + 0 dieci 1 dieci = = 32 dieci + 8 dieci + 4 dieci = = 44 dieci 101110101 due = 1 dieci 2 8 dieci+ 0 dieci 2 7 dieci+ 1 dieci 2 6 dieci+ 1 dieci 2 5 dieci+ 1 dieci 2 4 dieci+ 0 dieci 2 3 dieci+ 1 dieci 2 2 dieci+ 0 dieci 2 1 dieci+ 1 dieci 2 0 dieci = = 1 dieci 256 dieci + 0 dieci 128 dieci + 1 dieci 64 dieci + 1 dieci 32 dieci + 1 dieci 16 dieci + 0 dieci 8 dieci + 1 dieci 4 dieci + 0 dieci 2 dieci + 1 dieci 1 dieci = = 256 dieci + 64 dieci + 32 dieci + 16 dieci + 4 dieci + 1 dieci = = 373 dieci