Rappresentazione dei dati Rappresentazione digitale dei dati Numeri interi Numeri reali Caratteri Memoria del calcolatore è finita (C++: int) (C++ float e double) (C++ char) L’insieme dei numeri (interi e reali) e dei caratteri rappresentabili è finito Gli interi nel computer Con 32 bit rappresento 232 numeri distinti. Con n bit bn-1…b1 b0: 20 21 22 2n-3 2n-2 2n-1 b0 b1 b2 bn-3 bn-2 bn-1 x bn1 2 n 1 b1 2 b0 2 i 0 bi 2 1 0 e i negativi ? n 1 i Gli interi nel computer +/- 20 21 2n-3 2n-2 2n-1 s b0 b1 bn-3 bn-2 bn-1 Riserviamo il primo bit per il segno: 0 = positivo 1 = negativo. I numeri positivi rappresentabili sono quelli compresi tra 0 e 2n-1-1 Complemento a uno Si complementa a 2n-1 il valore assoluto del numero. x 2 i 0 bi 2 i 0 (1 bi )2 n 1 i i 0 n 1 i n 1 i Rappresentazione dello 0 630= --63 in binario 111111000000= ------111111 Con n = 6 si rappresentano i numeri: Rappr. 0 1 ... 31 32 ... 63 Numero 0 1 ... 31 positivi -31 ... negativi -0 Esempio Esempio con n = 6 bit: la rappresentazione di –10 è: 6310= --53 in binario 111111001010= ------110101 Complemento a due Si complementa il valore assoluto del numero a 2n invece che a 2n-1. Esempio con n = 6 bit: la rappresentazione di –10 è: 6410= --54 in binario 1000000001010= ------0110110 Rappresentazione dello 0 Complementando 0 si ottiene ancora 0 in binario 640= --64 ha gli ultimi 6 bit uguali a 0 1000000000000= ------1000000 Esempio Complementando 54 (che rappresenta –10) si ottiene 64in binario 54= --10 ha il bit 6 uguale a 0(positivo) 1000000110110= ------0001010 Esempio Complementando 32 (che rappresenta –32) si ottiene 64in binario 32= --32 ha il bit 6 uguale a 1(negativo) 1000000100000= ------0100000 Interi in complemento a due Con n = 6 si rappresentano i numeri: Rappr. 0 1 ... 31 32 ... 63 Numero 0 1 ... 31 positivi -32 ... negativi -1 In generale: con n bits positivi negativi 0 .... 2n-1-1 -2n-1 .... -1 Somma Somma di numeri positivi: 10+12 decimale 10+ 12= --22 binario riporto 001000 001010+ 001100= ------0010110 Somma di numeri negativi Somma di numeri negativi: (-10)+(-12) -10 64-10 = 54 decimale 54+ 52= --106 -12 64-12 = 52 binario 110110+ 110100= ------1101010 Somma di numeri negativi 106-64=42 64-42 = 22 bit di overflow complemento -22 64-22= 42 verifica 1101010 0*25+1*24+0*23+1*22+0*20 - 22 Somma Somma con un numero negativo (-10)+12 -10 64-10 = 54 decimale 54+ 12= --66 binario 110110+ 001100= ------1000010 Overflow 27+ 12= --39 64-39 = 25 011011+ 001100= ------0100111 -25 64-25= 39 Risultato: 27+12 = -25 Overflow -27 64-27= 37 37+ 52= --89 -12 64-12= 52 100101+ 110100= ------1011001 89-64 = 25 Risultato: -27-12 = 25 Rappresentazione decimale e binaria dei razionali 5 4 in binario 101 100 5 : 4 = 1,25 10 20 parte 0 1,2510 intera decimale 101 : 100 = 1,01 100 0 parte intera binaria parte frazionaria decimale 1,012 parte frazionaria binaria Esempio 1 7 3 7 : 3 = 2,33.. 10 10 1 2,333..10 = 2,310 in binario 111 11 111 : 11 = 10,01001001.. 0100 100 100 10,0100100..2 = 10,0102 Esempio 2 7 : 5 = 1,4 20 0 7 5 1,410 in binario 111 101 111 : 101 = 1,0110001000.. 1000 110 1000 1,0110001000..2 110 1000 = 1,0110002 Irrazionali 3,141592....10 in binario ? Parte frazionaria 0,1101001 2-1+ 2-2 + 2-4 + 2-7 Trucco moltiplicare per 2 significa spostare la virgola di un posto a destra 0,1101001 2-1 2-2... 1,101001 20 2-1....... Esempio 1 0,99 (decimale) = 0,b1b2b3...bk (binario) allora 2 0,99 = 1,98 = b1,b2b3...bk quindi b1 è 1 e 0,98 è rappresentato da 0,b2b3...bk Esempio 2 rappresentazione binaria di 0,592= 1,18 0,182= 0,36 0,362= 0,72 0,59 0,722= 1,44 0,442= 0,88 0,882= 1,76 0,100101... Rappresentazione dei reali 1 8 23 s e+127 m Rappresenta: x=s e 2 · 1,m implicito Estensione dei numeri in virgola mobile 0 e 255 sono esponenti riservati: 1 e+127 254 quindi -126 e 127 Esempio 12,65 1100, 101001... ??? 0,652 = 1.30 0,302 = 0.60 0,602 = 1.20 0,202 = 0.40 0,402 = 0.80 0,802 = 1.60 ….. Esempio cont. 1100,101001... = 23 1,100101001... mantissa = 1,100101001... esponente 3 e quindi 3+127 = 130 esponente = 10000010 segno = 0 0 10000010 100101001... Rappresentazione dei Reali “piccoli” 1 8 s 0 23 m Rappresenta: x=s -126 2 0,m implicito 0 0,m < 1 quindi -2-126 < x < 2-126 Rappresentazione dei Reali “grandi” 1 8 23 s 255 Rappresenta: 0 Si può ottenere come risultato di qualche operazione aritmetica (es: divisione per 0). Se lo si usa come operando in una operazione aritmetica si ha un errore. quanti reali si rappresentano? con una parola, cioè 32 bits possiamo rappresentare 232 cose, quindi al più 232 reali, la novità è che questi valori non sono distribuiti uniformemente come gli interi ma sono maggiormente concentrati in vicinanza dello 0 e si diradano sempre più allontanandosi dallo 0. Distribuzione disuniforme h=2 bits di mantissa e k=3 di esponente. k 1 e 2 1 e 3 Rappresentazione dell’esponente: 0 0 0 0 0 0 0 0 0 0 0 0 000 000 000 000 001 001 001 001 010 010 010 010 00 01 10 11 00 01 10 11 00 01 10 11 = = = = = = = = = = = = 0 2-2 2-2 2-2 2-2 2-2 2-2 2-2 2-1 2-1 2-1 2-1 = ·2-2 = ·2-1 = ·(2-1 +2-2 ) = ·1 = 4/32 = ·(1+2-2 ) = ·(1+2-1) = ·(1+2-1 +2-2 ) = ·1 = ·(1+2-2 ) = ·(1+2-1) = ·(1+2-1 +2-2 ) = 0 0.0625 0,125 0,1875 0,25 0,3125 0,375 0,4375 0,5 0,625 0,75 0,875 Distribuzione disuniforme cont. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 011 011 011 011 100 100 100 100 101 101 101 101 110 110 110 110 111 00 01 10 11 00 01 10 11 00 01 10 11 00 01 10 11 00 = = = = = = = = = = = = = = = = = 20 20 20 20 21 21 21 21 22 22 22 22 23 23 23 23 ·1 ·(1+2-2 ) ·(1+2-1) ·(1+2-1 +2-2 ·1 ·(1+2-2 ) ·(1+2-1) ·(1+2-1 +2-2 ·1 = 4 ·(1+2-2 ) ·(1+2-1) ·(1+2-1 +2-2 ·1 ·(1+2-2 ) ·(1+2-1) ·(1+2-1 +2-2 ) ) ) ) = = = = = = = = = = = = = = = = = 1 1,25 1,5 1,75 2 2,5 3 3,5 4 5 6 7 8 10 12 14 Distribuzione disuniforme cont. 4 8 0,5 0 2 0,25 1 0,125 0 10 1 12 14