NOTAZIONE BINARIA, OTTALE, ESADECIMALE CODIFICA DI NUMERI INTERI RELATIVI 1 CONVERSIONE BINARIO DECIMALE Convertire in decimale il numero binario N = 101011.10112 N = 1 · 25 + 0 · 24 + 1 · 23 + 0 · 22 + 1 · 21 + 1 · 20 + 1 · 2-1 + 0 · 2-2 + 1 · 2-3 + 1 · 2-4 = 43.687510 NB: 25 (32) 1 24 (16) 0 23 (8) 1 22 (4) 0 21 (2) 1 20 (1) 1 2-1 2-2 2-3 2-4 (1/2) (1/4) (1/8) (1/16) (.5) (.25) 1 0 (.125) (.0625) 1 1 2 CONVERSIONE DECIMALE BINARIO Dato un numero decimale (p.es. 57.6875), è necessario distinguere la parte intera dalla parte frazionaria: N = I.F (es: I=57, F=0.6875) Regola pratica per la conversione della parte intera ? ? ? ? I = Cn*2n + Cn-1*2n-1 + ....... + C1*21 + C0 3 Per convertire la parte intera I di un numero N decimale in notazione binaria basta dividerla ripetutamente per 2 e scrivere ordinatamente i valori dei resti ottenuti, a partire dalla posizione meno significativa /2 Es: decimale binario 57 28 14 7 3 1 0 1 0 0 1 1 1 5710 = 1110012 4 ERRORE TIPICO: considerare la prima cifra ottenuta come la più significativa: 57 28 14 7 3 1 0 1 0 0 1 1 1 otterrei 100111 che vale 39! NB: nel dubbio, ragionare!!! Se continuassi il procedimento di divisioni successive aggiungerei zeri; questi “non pesano” solo se corrispondono alle posizioni più significative ( 0…0xyz ) ! 5 Metodo “più pratico” di conversione da decimale intero a binario 128 7 64 6 32 5 16 4 8 3 4 2 2 1 1 0 ESEMPIO: convertire in binario 5710 57 = 1 1 10012 [32+16+8 +1] [25 + 24+23+ 20] NB: almeno per valori non troppo elevati, conviene abituarsi ad utilizzare questo metodo. 6 ESEMPI STANDARD Quanto vale il numero 0 ... 0 1 ... 1 1 1 n-1 2 1 0 n 2 -1 Esempi con 8 cifre: 8 1 1 1 1 1 1 1 1 2 -1 = 255 1 0 0 0 0 0 0 0 2 = 128 0 1 1 1 1 1 1 1 2 -1 = 127 7 7 7 Regola pratica per la conversione della parte frazionaria Dato un numero decimale, sia F la sua parte frazionaria. ? F = C-1 *2-1 ? + C-2 *2-2 ? + ....... + C-n*2-n 8 Regola pratica per la conversione della parte frazionaria Per convertire la parte frazionaria F di un numero decimale N in binario basta: - moltiplicare la parte frazionaria per 2 - scrivere il valore della parte intera ottenuto nella posizione più significativa - ripetere il procedimento sulla parte frazionaria ottenuta La conversione ha termine quando si ottiene una parte frazionaria nulla (ciò non è sempre garantito, cfr. p.es. il caso dei numeri periodici) 9 ESERCIZIO convertire 57.687510 in binario Parte intera 5710 = 1110012 (vedi prima) Parte frazionaria 0.6875 .375 .75 .5 0 1 0 1 1 57.687510 = 111001.10112 10 ERRORE TIPICO: considerare la prima cifra ottenuta come la meno significativa: 0.6875 0.375 0.75 0.5 0 1 0 1 1 0.1101 = 0.5 + 0.25 +… > 0.75 NB: se continuassi il procedimento di moltiplicazioni successive aggiungerei zeri; questi “non pesano” solo se corrispondono alle posizioni meno significative ( 0.xyz0…0 ) ! 11 ESERCIZIO Convertire in binario il numero decimale 137.025 Parte intera: Parte frazionaria: 137 = 100010012 0.025 0.05 0.1 0.2 0.4 0.8 .6 .2 0 0 0 0 0 1 1 Quindi 137.025 = 10001001.000 0011 12 NB: l’esempio precedente dimostra che un numero “limitato” in base 10 (0.025) può non essere “limitato” in base 2 (0.000 0011) Altro esempio: convertire in binario 0.8 0.8 .6 .2 0.4 0.8 1 1 0 0 0.810 = 0.11002 13 Operazione aritmetica di addizione è l’unica che ci servirà concretamente valgono le stesse regole e proprietà dell’addizione in base 10 si può svolgere “in colonna”: in particolare, si sommano le cifre binarie ottenendo un numero binario; se questo ha due cifre, la cifra più significativa è il “riporto” + 0 1 0 0 1 1 1 (1) 0 NB: 1+1 =210 =102 14 ESEMPIO 1001101.10110 + 1101100.11010 = 10111010.10000 ... ... (1)0 (1)1 15 Notazioni ottale ed esadecimale Oltre al sistema binario e decimale, vi sono altri sistemi “convenienti” per la rappresentazione dell’informazione (anche se in ogni caso nel calcolatore le informazioni sono codificate in binario): Sistema ottale (b = 23 = 8) Sistema esadecimale (b = 24 = 16) 16 Sistema ottale base = 8 cifre = 0,1,2,3,4,5,6,7 ES: 573.6718 = 5 * 82 + 7 * 81 + 3 * 80 + 6 * 8-1 + 7 * 8-2 + 1 * 8-3 NB: le conversioni da decimali ad ottali possono essere fatte con il metodo delle moltiplicazioni e divisioni successive. Tipicamente però le conversioni si effettuano tra ottali e binari… 17 18 Esercizio (conversione binario ottale) Convertire in notazione ottale il numero binario 111010.010 111 010 . 010 7 2 . 2 72.28 19 ERRORE TIPICO: Convertire in notazione ottale il numero binario 10111010.11 10111010.11 5 6 2. 3 Invece 562.38 = 5*64 + 6*8 + 2 + 3/8 = 370.375 che sicuramente non può essere rappresentato con una parte intera di soli 8 bit!!! PARTIRE SEMPRE DAL PUNTO DI RADICE, EVENTUALMENTE COMPLETANDO LE CIFRE CON DEGLI ZERI PER OTTENERE LE TERNE: xxx xxx . yyy yyy … 20 L’esercizio quindi va risolto così: 10111010.110 2 7 2 . 68 infatti risulta 272.68 = 2*64 + 7*8 + 2 + 6/8 = 186.75 e 10111010.112 = 128 + 32 + 16 + 8 + 2 + 0.5 + 0.25 = 186.75 21 ESERCIZIO (conversione ottale binario) Convertire in binario il numero in notazione ottale 135.18 1 3 5.18 0 0 1 0 1 1 1 0 1 . 001 ERRORE TIPICO: CONVERTIRE IN 001 011 101 . 1 infatti 0.18 = 1/8 mentre 0.12 = 1/2 22 Sistema esadecimale base = 16 ES: cifre = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F [10] [11] [12] [13] [14] [15] 97A.6E116 = 9 * 162 + 7 * 161 + 10 * 160 + 6 * 16-1 + 14 * 16-2 + 1 * 16-3 23 Esempi di conversione Binario esadecimale 0111010 .1 3 A . 816 Esadecimale binario E 3 . 716 ATTENZIONE!!! 11100011.0111 PARTIRE SEMPRE DAL PUNTO DECIMALE!!! xxxx . xxxx xxxx 24 Codifica di numeri interi relativi I numeri interi (con segno) sono rappresentati in una o più celle di memoria: sia n il numero di bit a disposizione. Esistono vari tipi di codifica: In valore assoluto e segno In complemento a 2 In complemento a 1 Polarizzazione o “eccesso” 25 Codifica in complemento a 2 Idea: con n cifre 2n numeri, p.es. da 0 a 2n – 1 Metà per i positivi e metà per i negativi, come in figura Rapp."normale +2n-1 -1 –2n-1 0111111 10000000 Numeri positivi +2 00000001 +1 00000000 0 11111111 –1 –2 n 2 -1 Numeri negativi C. A 2: 2n - N 26 Data una parola di lunghezza n: i numeri positivi sono rappresentati normalmente (rappresentazione binaria dei numeri positivi); il bit più significativo è pari a 0 i numeri negativi si ottengono come “complemento a 2” del numero positivo N corrispondente, ovvero come 2n-N; il bit più significativo è pari a 1 CI SONO 2 REGOLE SEMPLICI PER DETERMINARLO I valori rappresentabili vanno: da - 2n-1 in pratica da - (2n-1 - 1) a + 2n-1 - 1 a + 2n-1 - 1 27 Complemento a 2 Dato un numero N rappresentato in base 2 da n cifre il suo complemento a 2 è dato da C2 = 2n - N Esempio con 8 bit: N = 010101002 C2 = (84) 100000000 01010100 10101100 _____________________________________________ Regole pratiche equivalenti: 1) partendo dal bit meno significativo e procedendo verso sinistra, si lasciano immutati tutti i bit fino al primo 1 compreso, poi si invertono gli altri 2) si complementano tutti i bit (complemento a uno) e si aggiunge 1 28 ESERCIZIO Rappresentare in complemento a due con 8 bit il numero decimale –67. quindi 6710 = 010000112 -67 = 10111101 Con la regola del complemento a uno: 10111100+ 1= 10111101 29 ERRORE TIPICO: dimenticarsi che la rappresentazione in C.a 2 è relativa ad un numero di bit fissati!!! Es. Rappresentare in C. a 2 con 8 bit il numero decimale –3. 310 = 112 quindi –3 = 01 ma questo risulta un numero positivo!!! Svolgimento corretto: 3 = 00000011 (8 bit) -3 = 11111101 30 ALTRO ERRORE TIPICO: complementare sempre e comunque, anche i numeri positivi! ES: Rappresentazione in complemento a due con 6 bit del numero decimale 15. 15 = 001111 anche codificato in compl. a 2!!! 31 Estensione del segno Estendiamo il segno per rappresentare un numero su n=k + d bit anziché su n=k bit 1 0 0 1 -7 su n = 4 bit 1 1 1 1 1 0 0 1 -7 su n = 8 bit 32 Aritmetica in complemento a 2 Addizione: L'addizione di due numeri rappresentati in complemento a 2 dà il risultato corretto trascurando il riporto (a patto che il risultato sia entro il range dei numeri rappresentabili). Sottrazione: Si riconduce sempre all’addizione: somma del complemento a 2. Overflow: Si manifesta quando il risultato non è rappresentabile con i bit a disposizione. Due regole equivalenti per determinarlo… 33 REGOLA 1 PER DETERMINARE SE C’E’ OVERFLOW - Se gli addendi hanno segno discorde non è possibile avere overflow: MAX (+) N1 Somma compresa tra N1 (positivo) ed N2 (negativo), quindi sicuramente rappresentabile! 0 N2 MIN (-) - Se gli addendi hanno segno concorde, cfr. il segno del risultato: + e +: deve risultare +, altrimenti overflow! – e –: deve risultare –, altrimenti overflow! 34 Regola equivalente per l’overflow • Con una rappresentazione su n bit, si ha overflow se i riporti generati nelle due posizioni più significative (n-1 e n-2 in figura) sono diversi n-1 n-2 1 0 (ovvero: c’è riporto generato in una posizione ma non nell’altra) 35 Esempi (n=6: -32 x 31) 26 – 13 = 26 + (-13) = +13 [no overflow] 011010+ 26 1 1 0 0 1 1 = -13 1 001101 +13 [13: 0 0 1 1 0 1 ] _______________________________________ -25 –13 = -25 + (-13) = -38 [overflow] 1 0 0 1 1 1 + -25 [25: 0 1 1 0 0 1 ] 1 1 0 0 1 1 = -13 [13: 0 0 1 1 0 1 ] 1 011010 “+26” _______________________________________ 36 Esercizio (Appello del 23 set 2003) Rappresentare i numeri –51 e –98 (in base 10) in notazione binaria in complemento a due con 8 bit. Eseguire la somma algebrica dei numeri così ottenuti e commentare il risultato. [3] Soluzione Conversione nella notazione binaria dei numeri (valori assoluti) 51 = 001100112 (32 + 16 + 2 + 1) 98 = 011000102 (64 + 32 + 2) Rappresentazione in complemento a due: -51 = 11001101 -98 = 10011110 37 Somma algebrica: 11001101 + 10011110 = 1 01101011 Risultato: 01101011 Commento (= dire se c’è overflow e spiegare perché nel dettaglio): - riporto generato in posizione 7: NO - riporto generato in posizione 8: SI Poiché i riporti generati nei bit di posizione 7 e 8 sono diversi ho un caso di overflow Spiegazione equivalente: dalla somma di due numeri negativi ottengo un numero positivo. 38 ERRORI TIPICI: Dire che c’è overflow perché “i bit di posizione più significativa sono diversi”. In questo caso si ha incidentalmente overflow (risultato 01101011) ma la risposta è da ritenersi sbagliata, perché occorre considerare i riporti! Motivare la risposta con l’intervallo di rappresentazione (il risultato non è rappresentabile): il metodo indicato deve essere eseguibile dal calcolatore, il quale non ragiona in decimale! Usare invece la regola dei riporti o, alternativa equivalente, la regola dei segni! 39 Esercizio (Appello dell’11 set 2003) Rappresentare i numeri –54 e –44 (in base 10) in notazione binaria in complemento a due con 8 bit. Eseguire la somma algebrica dei numeri così ottenuti e commentare il risultato. [3] Soluzione Conversione nella notazione binaria dei numeri (valori assoluti) 54 = 001101102 (32+16+4+2) 44 = 001011002 (32+8+4) Rappresentazione in complemento a due dei numeri (con 8 bit) -54 = 11001010 -44 = 11010100 40 Somma algebrica: 11001010 + 11010100 = 1 10011110 e quindi il risultato è 10011110. Commento: Non c’è overflow perché i riporti generati nelle posizioni 7 e 8 sono uguali (1 e 1). Spiegazione equivalente: dalla somma di due numeri negativi si ottiene correttamente un numero negativo. [NB: il risultato è pari a – 011000102 = –9810, che è proprio –54 – 44] 41 ERRORE COMMESSO DA ALCUNI Dimenticarsi del numero di bit (8): 54 = 1101102 44 = 1011002 -54 = 001010 -44 = 010100 e sommando: 001010+ 010100= 011110 risultato che non ha alcun senso!!! (NB: in questo caso l’esercizio è valutato 0 punti!) 42 Esercizio (Appello del 9 dic 2002) Rappresentare i numeri 96 e 69 (in base 10) in notazione binaria in complemento a due con 8 bit. Eseguire la somma algebrica dei numeri così ottenuti e commentare il risultato. [4] Soluzione Rappresentazione in complemento a due con 8 bit: 96 = 01100000 69 = 01000101 Somma algebrica: 01100000+ 01000101= 10100101 43 Commento: Ho overflow perchè i riporti sono diversi (ho soltanto il riporto nel bit 7). Spiegazione equivalente: il risultato ha il “bit di segno” pari a 1 (rappresenta un numero negativo) ma è ottenuto dalla somma di due positivi!. ERRORE TIPICO: complementare i due numeri che in realtà sono positivi (NB: in questo caso l’esercizio è valutato 0 punti). 44