460 likes | 609 Views
Esercitazioni - Informatica A. Roberto Tedesco E-mail: tedesco@elet.polimi.it Ufficio: 103, 1° piano DEI Tel: 02 2399 3667 oppure 02 2399 3668 Ricevimento: venerdì 10.30 – 12.30 Sito web del corso: http://www.elet.polimi.it/corsi/infoA Slide mostrate durante l’esercitazione
E N D
Esercitazioni - Informatica A • Roberto Tedesco • E-mail: tedesco@elet.polimi.it • Ufficio: 103, 1° piano DEI • Tel: 02 2399 3667 oppure 02 2399 3668 • Ricevimento: venerdì 10.30 – 12.30 • Sito web del corso:http://www.elet.polimi.it/corsi/infoA • Slide mostrate durante l’esercitazione • Raccolte di esercizi • Di regola, le slide saranno disponibili prima della lezione
1,3,2 a2 = a1 = a0 = Il sistema posizionale • L’idea del sistema posizionale: ogni cifra ha un pesoEsempio: 132 = 100 +30 +2 • Facciamo un passo indietro… • Un numero generico di m cifre è rappresentato dalla sequenza di cifre: an, an-1, an-2,..., a0an cifra più significativa, a0 cifra meno significativa n = m —1 ai {0, 1, ..., p—1} insieme delle cifre utilizzabili • p è detto base • Di solito noi usiamo la base decimale (p=10)Esempio: 132 m = 3 ai {0, 1, ..., 9}
Rappresentazione in base p • Nel sistema posizionale, un numero naturale N, composto da m cifre, in base p, si esprime come: Esempio in basedecimale o base dieci (p=10):13210 =1·102+3·101+2·100 Posso rappresentare i numeri nell’intervallo discreto: [0 , pm — 1] .
Rappresentazione in base due • Basebinaria o base due:p=2ai {0, 1} chiamate bit (binary digit) • Una sequenza di otto bit è detta byte • Esempio, con m=5: 110112 = (1·24+1·23+0·22+1·21+1·20)10 = 2710 • Converto dalla base 2 alla base 10 • Posso rappresentare i numeri nell’intervallo discreto: [0 , 2m —1] • Esempio: con m=8, rappresento numeri binari: [000000002 , 111111112], ovvero [010 , 25510]28—1 = 255.
Conversione base dieci base due • Esempio, 1410: 14 : 2 = 7 resto = 07 : 2 = 3 resto = 13 : 2 = 1 resto = 11 : 2 = 0 resto = 1 1410 = 11102 .
Somma • Le cifre sono 0 e 1; il riporto può essere solo 1
Somma e carry • Esempio: 1 riporto0101 +(510)1001 =(910)------1110(1410) 111 riporti1111 +(1510)1010 =(1010)-------carry 11001(2510 se uso 5 bit; 910 se considero 4 bit: errato) .
Base ottale (o base otto) • p=8; ai {0, 1, 2, 3, 4, 5, 6, 7} • Esempio: 2348 = (2·82+3·81+4·80)10 = 15610 • Sapendo che 8 = 23: conversione binario ottale • Esempio: 10111110021012 = (122+021+120 )10 = 510 = 581112 = (122+121+120 )10 = 710 = 78 1002 = (122+021+020 )10 = 410 = 48 Quindi, 1011111002 = 5748 • Sapendo che 8 = 23: conversione ottale binario • Esempio: 1268 18 = 110 = 0012 28 = 210 = 0102 68 = 610 = 1102 Quindi, 1268 = 0010101102.
Base esadecimale (o base sedici) • p=16; ai {0, 1, 2, …, 9, A, B, C, D, E, F} • Esempio: B7F16 = (11·162+7·161+15·160)10 = 294310 • “B” al posto di “11” e “F” al posto di “15” • Sapendo che 16=24: Conversione binario esadecimale • Esempio: 101111101200012 = (023+022+021+120)10 = 110 = 11601112 = (023+122+121+120)10 = 710 = 716 11012 = (123+122+021+120)10 = 1310 = D16 Quindi, 1011111012 = 17D16 • Sapendo che 16=24: Conversione esadecimale binario • Esempio: A316 A16 = 1010 = 10102 316 = 310 = 00112 Quindi, A316 = 101000112 .
Num. intero, base 10 Num. intero, base due, modulo e segno –3 111 –2 110 –1 101 –0 100 +0 000 +1 001 ? +2 010 +3 011 Modulo e segno • Non posso memorizzare il “segno”, uso una codifica • Uso un bit per memorizzare il segno: “1” significa numero negativo, “0” numero positivo. Esempio m=3:
Complemento a due (CPL2) • Usando m bit: (–N)CPL2 = (2m — N10)2 • Esempio (m=3): (–N)CPL2 = (23 — N10)2
Complemento a due (CPL2) • Posso rappresentare i numeri nell’intervallo discreto:[–2m—1 , 2m—1 — 1] • Asimmetria tra negativi e positivi • Esempio (m=8):[–128, +127], perché –27 = –128 e 27—1 = +127 • Tutti i numeri negativi cominciano con il bit più significativo posto a “1”, mentre tutti i positivi e lo zero iniziano con uno “0” .
Calcolo pratico del CPL2 • Se m, il numero di bit da utilizzare per memorizzare il numero intero, è conosciuto: • Il minimo numero negativo che potrò codificare sarà –2m—1, mentre il massimo numero positivo che potrò codificare sarà 2m—1 — 1 • Se ho N10 e N10 2m—1— 1, lo codifico in base due così com’è, su m bit (aggiungendo cioè zeri a sinistra così da riempire tutti gli m bit disponibili) • Se ho –N10 e –N10–2m—1, uso la seguente “regola rapida”: • Parto dal numero positivo N10 e lo codifico in base due su m bit (aggiungo cioè zeri a sinistra così da riempire tutti gli m bit disponibili) • Modifico ogni “0” in “1” ed ogni “1” in “0” (“complemento”) • Sommo 1, usando le consuete regole dell’addizione binaria .
Calcolo pratico del CPL2 • Se m non è conosciuto, lo ricavo nel seguente modo: • Se ho numero positivo N10, prendo il minimo m tale che N102m—1 — 1 • Se ho numero negativo –N10, prendo il minimo m tale che –N10–2m—1 • Quindi eseguo l’algoritmo illustrato nella slide precedente • Se devo codificare un intervallo [-N10 , +M10]: • Calcolo m’ per –N10 • Calcolo m” per +M10 • m = max (m’, m”) .
Calcolo pratico del CPL2 • Esempio: –210 con m=8 bit:210 = 000000102 111111012 + 12 = --------------- 111111102 • Esempio: –510 con m=? bit:provo con m=2,3,4 e scopro che –5 –2(4—1), allora m=4; adesso codifico –5 con m=4 bit:510 = 0101210102 + 12 = ---------10112 .
Valore decimale di un numero in CPL2 • Se il numero è positivo (bit più significativo posto a “0”), lo converto usando la solita sommatoria • Se il numero è negativo (bit più significativo posto a “1”), allora: • Calcolo il modulo del numero, ovvero applico ancora su di esso il CPL2 • Considero il numero risultante N2come un NATURALE (cioè come un numero senza segno, l’eventuale “1” iniziale non indica piùil segno) e lo converto con la solita sommatoria. Ottengo N10 • A questo punto, il numero decimale è –N10.
Valore decimale di un numero in CPL2 • Esempio: 10000012 = ? • Numero negativo • Applichiamo CPL2 e otteniamo: 01111112 • Consideriamolo un naturale e convertiamolo usando la solita sommatoria: 01111112 = 6310 • Allora 10000012 = –6310 • Esempio: 01010012 = ? • Numero positivo • Convertiamolo usando la solita sommatoria:01010012 = 4110 .
Somma e sottrazione in CPL2 • Somma: come per i naturali • Sottrazione: N1— N2 = N1 + (–N2)CPL2 • Carry: • Il bit di carry non viene considerato! • Overflow: • Se, sommando due interi di m bit dotati di segno concorde, ottengo un risultato di segno discorde (sempre considerando m bit), allora si ha un overflow (il risultato non è codificabile su m bit) e l’operazione è errata • L’overflow non può verificarsi se gli operandi sono di segno discorde.
Somma e sottrazione in CPL2 • Esempi (m=7 cioè da –6410 a +6310):0000101 +(+510)1111000 =(–810)---------1111101(–310) 1111 riporti1111011 +(-510)0001000 =(+810)----------carry 10000011 (butto via il carry)10000011(+310) .
Somma e sottrazione in CPL2 1 riporti1000000 +(–6410)1111000 =(–810) ----------carry 10111000(butto via il carry) 0111000 (+5610: sbagliato; dovrebbe essere –7210) Overflow: –7210 non è codificabile su 7 bit in CLP2 11111 riporti0111111 +(+6310)0000010 =(+210)---------1000001(–6310: è sbagliato; dovrebbe essere +6510) Overflow: +6510 non è codificabile su 7 bit in CPL2 .
I Flag • Insieme di “segnalatori”, calcolati dopo ogni istruzione: • Z (Zero). Vale “1” sse il risultato dell’addizione è zero; “0” altrimenti • N (Negative). Vale “1” sse il risultato dell’addizione è negativo; “0” altrimenti • C (Carry). Vale “1” sse l’addizione ha prodotto un carry; “0” altrimenti • V (oVerflow). Vale “1” sse l’addizione ha prodotto un overflow; “0” altrimenti • Per esempio, nell’esercizio che aveva per risultato 10000012, avrei ottenuto: Z=0; N=1; C=0; V=1 • I Flag sono usati da alcune istruzioni della macchina di Von Neumann .
Conclusione • Se si opera con numeri che si considerano naturali, si sta attenti al Flag di carry (C), se si opera con numeri che si considerano interi, si sta attenti al Flag di overflow (V) • I Flag sono computati tutti, al termine di ogni istruzione (escluse le istruzioni di salto) • Come fa a macchina di Von Neumann a sapere se sta operando su numeri naturali o interi? Semplicemente, NON LO SA! Le operazioni che la macchina esegue sono identiche in entrambi i casi, soltanto l’interpretazione dei risultati cambia .
Parte frazionaria di un numero • Rappresentiamo la parte frazionaria di un numero reale • In base due, un numero frazionario N, composto da n cifre, si esprime come: Esprimo in realtà l’equivalente in base dieci Esempio con n=3: 0,1012 =(1·2-1+0·2-2+1·2-3)10= 0,87510 Date n cifre in base p=2, posso rappresentare numeri nell’intervallo continuo: [02 , 0,111…12]ovvero nell’equivalente in base dieci: [0 , 1—2—n] è l’errore di approssimazione < max = 2—n .
Parte frazionaria di un numero • Esempio, con n=8: • Codifico i numeri [0,000000002 , 0,111111112] ovvero i numeri compresi in [0 , 1—2—8 = 0,99609375] • max = 2—8 = 0,00390625 .
Parte frazionaria di un numero • Per passare dalla base dieci alla base due.Esempio, convertiamo 0,2110 avendo n=6: 0,21 2 = 0,42 parte intera = 0 parte fraz. = 0,420,42 2 = 0,84 parte intera = 0 parte fraz. = 0,840,84 2 = 1,68 parte intera = 1 parte fraz. = 0,680,68 2 = 1,36 parte intera = 1 parte fraz. = 0,36 0,36 2 = 0,72 parte intera = 0 parte fraz. = 0,720,72 2 = 1,44 parte intera = 1 parte fraz. = 0,44 • Termino quando ho utilizzato gli n bit a disposizione • Prendo le parti intere, dalla prima all’ultimaAllora 0,2110 0,0011012 • Riconvertendo: 0,0011012 = 0,20312510=0,21—0,203125=0,006875; < max; (max=2—6=0,015625).
R 0 Virgola fissa • Uso m bit e n bit per parte intera e frazionaria • Esempio (m=8, n=6, tot. 14 bit): -123,2110-12310 = 1000010120,2110 0011012-123,2110 10000101,0011012 • Come scelgo m e n? • Precisione costante lungo R:
R 0 Virgola mobile (floating point) • Il numero è espresso come: r = m·bn • m e n sono in base p • m:mantissa (numero frazionario con segno) • b:base della notazione esponenziale (numero naturale) • n:caratteristica (numero intero) • Esempio (p=10, b=10): -331,6875 = –0,3316875103m = –0,3316875 n = 3 • Precisione variabile lungo R. Per es. con 5 cifre per m: • 13212,4323 = 0,13212105= 13212 (ho perso 0,4323) • 7,345312 = 0,73453101 = 7,3453 (ho perso 0,000012)
l1 bit m con segno(l1 bit) n (l2 bit) Virgola mobile (floating point) • Mantissa (m): • Codifico solo la parte a destra della virgola • Codifico il segno • Caratteristica (n): • l2 bit
Virgola mobile (floating point) • Quando la prima cifra a destra della virgola è diversa da zero, il numero in virgola mobile si dice normalizzatoEs. –0,3716875103 è normalizzato perché la prima cifra a destra della virgola è “3” • La normalizzazione permette di avere, a parità di cifre usate per la mantissa, una maggiore precisione. Es. Uso l1=5 cifre per la mantissa:+45,6768 +0,45676102 +0,00456104 Ho perso 0,0008 Ho perso0,0768
Caratteri • Codifica numerica • ASCII (American Standard Code for Information Interchange) utilizza 7 bit (estesa a 8 bit) • L’ASCII codifica • I caratteri alfanumerici (lettere maiuscole e minuscole e numeri), compreso lo spazio • I simboli (punteggiatura, @, ecc) • Alcuni caratteri di controllo (TAB, LINEFEED, RETURN, BELL, ecc).
DEC CAR DEC CAR DEC CAR DEC CAR DEC CAR 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 97 a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z Tabella ASCII (parziale)
Tabella ASCII • Anche le cifre numeriche sono codificate • Le lettere sono in sequenza alfabetica • Per passare dal minuscolo al maiuscolo: Codicemaiuscolo = Codiceminuscolo– 3210 • Alcuni caratteri sulla tastiera italiana: • ALT-123=“{“ oppure SHIFT-ALTGR-[ • ALT-125=”}” oppure SHIFT-ALTGR-] • ALT-126=”~” • Sul libro a pag. 403 si trova la tabella ASCII estesa .
Algebra di Boole • E’ basata su tre operatori: AND, OR, NOT • Ogni formula può assumere solo due valori: “vero” o “falso”. Idem per le variabili • Rappresentiamo “vero” con “1” e “falso” con “0” • AND e OR sono operatori binari (come, per esempio, l’operatore somma “+” dell’algebra) • NOT è un operatore unario (come, per esempio, l’operatore fattoriale “!” dell’algebra).
Operatori booleani • Tavole di verità:
Operatori booleani • Gli operatori AND e OR godono delle seguenti proprietà: • Commutativa: • A OR B = B OR A • A AND B = B AND A • Distributiva di uno verso l’altro: • A OR (B AND C) = (A OR B) AND (A OR C) • A AND (B OR C) = (A AND B) OR (A AND C) .
Ancora operatori booleani: XOR Operatore XOR (OR esclusivo): A XOR B = (NOT A AND B) OR (A AND NOT B).
Espressioni booleane • Regole di precedenza: • NOT ha la massima precedenza • poi segue AND • infine OR (e XOR) • Se voglio alterare queste precedenze devo usare le parentesi (a volte usate solo per maggior chiarezza) • Per valutare un espressione booleana si usa la tabella della verità • Espressioni booleane uguali: sse le tabelle della verità sono identiche.
Dalla formula alla tabella • Vediamo un esempio, per l’espressione:D = A AND NOT (B OR C)
NOT A AND B A AND NOT B A AND B Dalla tabella alla formula • Se conosco la tabella della verità, posso ricostruire la formula logica. Partiamo dalla tabella: • C1 = (NOT A AND B) OR (A AND NOT B) OR (A AND B) .
A A C C A C B B C = A AND B C = A OR B C = NOT A A A B D D D=A AND B AND C B C C . Porte logiche • Ogni operatore booleano (AND, OR, NOT) ha un equivalente elettronico: Le porte AND e OR sono “operatori n-ari”:
Dalla formula al circuito • Esempio: C = NOT (NOT A AND NOT B) .