Appunti di informatica Lezione 2 anno accademico 2015-2016 Mario Verdicchio Sistema binario e logica • C’è un legame tra i numeri binari (0,1) e la logica, ossia la disciplina che si occupa del ragionamento • Noi ragioniamo intorno a delle affermazioni, che possono essere vere oppure false* • I valori di verità delle affermazioni sono due: vero o falso e possiamo costruire una codifica binaria • 0 corrisponde al falso, 1 al vero *si tratta naturalmente di un’idealizzazione: esistono anche affermazioni dal valore di verità incerto o impossibile da verificare Codifica binaria • • • • • • • • Codifica: corrispondenza biunivoca tra un insieme di elementi e un insieme di numeri naturali Per “biunivoca” si intende una corrispondenza tra due insiemi (chiamati dominio e codominio) che è sia iniettiva sia suriettiva Una corrispondenza si dice “iniettiva” quando a elementi diversi del dominio corrispondono elementi diversi del codominio Una corrispondenza si dice “suriettiva” quando tutti gli elementi del codominio sono coinvolti nella corrispondenza In un corrispondenza biunivoca, quindi, a ogni elemento del dominio corrisponde uno e un solo elemento del codominio e viceversa In una codifica, gli elementi del codominio sono numeri naturali Un esempio di codifica nella vita quotidiana è il sistema di immatricolazione in un’università: a ogni studente corrisponde una e una sola matricola e a una matricola corrisponde uno e un solo studente Una codifica in cui il codominio è costituito da due soli elementi si dice codifica binaria Operatori logici • Come in algebra si eseguono operazioni sui numeri per ottenere altri numeri (esempio banale: applichiamo l’operazione somma a 3 e 5 e otteniamo 8) così in logica si eseguono operazioni sui valori di verità • Le operazioni sui valori di verità si eseguono mediante i cosiddetti operatori logici: congiunzione, disgiunzione, negazione Congiunzione • Date due affermazioni A e B, applicando una congiunzione si ottiene un’affermazione composta che indichiamo con “A e B” (oppure “A and B”, “A && B”, “A∧B”) che è vera solo quando sia A sia B sono vere, e falsa in tu8 gli altri casi Disgiunzione • Date due affermazioni A e B, applicando una disgiunzione si ottiene un’affermazione composta che indichiamo con “A o B” (oppure “A or B”, “A || B”, “A∨B”) che è falsa solo quando sia A sia B sono false, e vera in tu8 gli altri casi Negazione • Date una affermazione A, applicando una negazione si ottiene un’affermazione composta che indichiamo con “non A” (oppure “not A”, “!A”, “¬A”) che è falsa quando A è vera e viceversa • A differenza di congiunzione e disgiunzione, che sono operatori binari perché si applicano a due operandi, la negazione è un operatore unario perché si applica a un solo operando Disgiunzione esclusiva • Chiamato anche “or esclusivo” e indicato con “xor” (oppure ⊕), è l’operatore logico con cui costruire una affermazione “A xor B” che è vera quando A (oppure B) è vera e l’altra è falsa, mentre è falsa quando sia A sia B hanno lo stesso valore di verità Tavole di verità • Con le tavole di verità si possono rappresentare graficamente le definizioni dei diversi operatori logici Precedenze degli operatori • ! precede &&, che precede ||, che precede ⊕ • !A&&B||C è equivalente a ((!A)&&B)||C • Le parentesi vincono sulle precedenze: in !((A||B)&&C) la disgiunzione viene eseguita per prima, poi la congiunzione, da ultimo la negazione Uso delle tavole di verità • Le tavole di verità possono essere usate per dimostrare l’equivalenza di certe affermazioni • Due affermazioni si dicono (logicamente) equivalenti quando hanno lo stesso valore di verità in tutti i casi • Ad esempio, A xor B è equivalente a (A or B) and not(A and B) Altre equivalenze logiche • • • • • • notA and A ≡ falso notA or A ≡ vero falso and A ≡ falso falso or A ≡ A vero or A ≡ vero vero and A ≡ A • not(A and B) ≡ not A or not B • not(A or B) ≡ not A and not B • Tramite le equivalente logiche certe affermazioni possono essere semplificate in affermazioni equivalenti • Ad esempio: (not A and A) or (not B and C) è equivalente a not B and C Regole di inferenza • Una regola di inferenza è un meccanismo con cui ottenere da una o più affermazioni una nuova affermazione. Ad esempio: A B A∧B • La regola “introduzione di congiunzione” dice che, a partire da A e B, possiamo ottenere A∧B. Regole di inferenza corrette • Una regola di inferenza si dice corretta se, a partire da affermazioni vere, ci permette di ottenere affermazioni vere • La regola “introduzione di congiunzione” è corretta. Lo si può verificare mediante opportune tavole di verità • Una regola come “eliminazione di disgiunzione”, invece, non è corretta: A∨B A perché esiste un caso in cui A∨B è vera ma A è falsa • A noi interessano solo regole di inferenza corrette • La equivalente logiche sono un caso speciale di regole di inferenza Uso della logica in informatica • Tipicamente i sistemi informatici sono attivati per eseguire delle operazioni • A volte alcune operazioni devono essere eseguite solo se certe condizioni si verificano • Tali operazioni si chiamano istruzioni condizionali • Le condizioni che devono essere verificate sono di fatto affermazioni che all’istante della verifica hanno un valore di verità (cioè sono vere oppure false) Condizioni semplici • Si definisce condizione semplice un’affermazione che confronta due valori • Ha tipicamente la forma: valore – operatore di confronto – valore • Esempi (con relativo valore di verità): 4 < 10 (vera) 45 ≥ 98 (falsa) x < 100 (dipende dal valore di x al momento della verifica) Condizioni composte • Si costruisce una condizione composta a partire da condizioni semplici per mezzo di operatori logici • Esempi [e relativi valori di verità]: (4 < 10) and (50 ≥ 400) [falsa] (10 ≤ 10) or (100 > 100) [vera] not (x ≤ 5) [dipende dal valore di x] Tipi di condizioni in base alla verità • Tautologie: condizioni, come notA or A, che sono sempre vere (qualunque sia il valore di A) • Contraddizioni: condizioni, come notA and A, che sono sempre false (qualunque sia il valore di A) • Tutte le altre condizioni che possono essere sia vere sia false, a seconda dei valori delle loro componenti, si dicono contingenze Porte logiche (1) • Negazione, NOT, ! IN OUT 0 1 1 0 IN OUT Porte logiche (2) • Congiunzione, AND, && IN1 IN2 OUT= IN1 AND IN2 0 0 0 0 1 0 1 0 0 1 1 1 IN1 OUT IN2 Porte logiche (3) • Disgiunzione, OR, || IN1 IN2 OUT= IN1 OR IN2 0 0 0 0 1 1 1 0 1 1 1 1 IN1 OUT IN2 Porte logiche (4) • Disgiunzione esclusiva, XOR, ⊕ IN1 IN2 OUT= IN1 XOR IN2 0 0 0 0 1 1 1 0 1 1 1 0 IN1 OUT IN2 Codifica binaria • Il processore, abbiamo detto, lavora solo con segnali elettrici • Segnali elettrici a valori alti di tensione vengono fatti corrispondere al numero 1 • Segnali elettrici a valori bassi di tensione vengono fatti corrispondere al numero 0 • Questa si chiama codifica binaria • Da questo punto di vista, il calcolatore opera solo con due cifre: 0 e 1 • Tutta l’informazione che un calcolatore elabora viene espressa con queste due cifre, per mezzo della codifica binaria Numerazione: le basi • Noi siamo abituati a una numerazione basata su 10 cifre: da 0 a 9 • La base della nostra numerazione è il 10: 147 = 7 x 100 + 4 x 101 + 1 x 102 • La base del sistema binario è il 2: 1011 = 1 x 20 + 1 x 21 + 0 x 22 + 1 x 23 Se si svolge il calcolo si ottiene il numero che, in base 10, corrisponde a 1011 in base 2. Base 2 -> Base 10 • 10112, ossia 1011 in base 2, a che numero in base 10 corrisponde? • Stiamo cercando la x tale che: 10112 = x10 • Basta ricordarsi la definizione di base 2: 1011 = 1 x 20 + 1 x 21 + 0 x 22 + 1 x 23 = 11 • Perciò 1011 in base 2 vuol dire 11 in base 10: 10112 = 1110 • Il “nostro” 11 è per il calcolatore 1011 Base 10 -> Base 2 • Il metodo per esprimere in base 2 un numero dato in base 10 è il seguente • Cerchiamo la x tale che: 2510 = x2 • Si procede con una sequenza di divisioni per 2, fintantoché il quoziente non diventa 0, e scrivendo la sequenza dei resti in ordine inverso Come si scrive 25 in base 2? • • • • • • 25 : 2 = 12 con resto 1 12 : 2 = 6 con resto 0 6 : 2 = 3 con resto 0 3 : 2 = 1 con resto 1 1 : 2 = 0 con resto 1 Una volta ottenuto il quoziente pari a 0, scriviamo i resti in ordine inverso: 2510 = 110012 Verifica del metodo • 11001 è davvero la codifica in base 2 di 25? • Basta svolgere i calcoli basati sulla definizione di sistema binario • 110012 = 1 x 20 + 1 x 23 + 1 x 24 = 1 + 8 + 16 = 2510 (gli addendi con lo 0 sono stati omessi perché ovviamente non influiscono sulla somma) Numeri binari in memoria • In un calcolatore, i numeri binari sono tipicamente memorizzati in sequenze di caselle (note anche come parole) di lunghezza fissa dipendente dalla struttura del calcolatore stesso. • Ad esempio, una parola di 4 bit può contenere il numero 01012 0 1 0 1 Combinazioni possibili di numeri • Una parola di 4 bit può contenere 24 = 16 numeri binari diversi: da 0000 a 1111 • In generale, una parola di n bit può contenere 2n numeri binari diversi Dimensioni delle memorie • 8 bit = 1 Byte (1B) • 210 Byte = 1024 Byte = 1 KiloByte (1KB) • 220 Byte = 1048576 Byte = 1 MegaByte (1MB) • 230 Byte = 1073741824 Byte = 1 GigaByte (1GB) • 240 Byte = 1099511627776 Byte = 1 TeraByte (1TB) Dimensioni delle memorie (2) • Oramai è sempre più diffusa la seguente approssimazione: • 1000 (103) Byte (o bit) = 1 KiloByte o KiloBit (1KB o 1Kb) • 1000000 (106) Byte (o bit) = 1 MegaByte o MegaBit (1MB o 1Mb) • 1 miliardo (109) Byte (o bit) = 1 GigaByte o GigaBit (1GB o 1Gb) • 1000 miliardi (1012) Byte (o bit) = 1 TeraByte o TeraBit (1TB o 1Tb)