Rappresentazione dei dati
Rappresentazione digitale dei dati Numeri interi (C++: int) Numeri reali (C++ float e double) Caratteri (C++ char) L’insieme dei numeri (interi e reali) e dei caratteri rappresentabili è finito Memoria del calcolatore è finita
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 e i negativi ?
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.
Rappresentazione dello 0 63- 0= --- 63 111111- 000000= ------- 111111 in binario Con n = 6 si rappresentano i numeri: Rappr. 0 1 ... 31 32 ... 63 0 1 ... 31 -31 ... -0 Numero positivi negativi
Esempio 63- 10= --- 53 111111- 001010= ------- 110101 in binario Esempio con n = 6 bit: la rappresentazione di –10 è: 63- 10= --- 53 111111- 001010= ------- 110101 in binario
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 è: 64- 10= --- 54 1000000- 001010= ------- 0110110 in binario
Rappresentazione dello 0 Complementando 0 si ottiene ancora 0 in binario 64- 0= --- 64 ha gli ultimi 6 bit uguali a 0 1000000- 000000= ------- 1000000
Esempio Complementando 54 (che rappresenta –10) si ottiene in binario 64- 54= --- 10 ha il bit 6 uguale a 0(positivo) in binario 1000000- 110110= ------- 0001010
Esempio Complementando 32 (che rappresenta –32) si ottiene in binario 64- 32= --- 32 ha il bit 6 uguale a 1(negativo) 1000000- 100000= ------- 0100000 in binario
Interi in complemento a due Con n = 6 si rappresentano i numeri: 0 1 ... 31 32 ... 63 0 1 ... 31 -32 ... -1 positivi negativi Rappr. Numero
In generale: con n bits positivi 0 .... 2n-1-1 negativi -2n-1 .... -1
Somma Somma di numeri positivi: 10+12 decimale binario riporto 001000 12= --- 22 001010+ 001100= ------- 0010110
Somma di numeri negativi -10 64-10 = 54 -12 64-12 = 52 decimale binario 54+ 52= --- 106 110110+ 110100= ------- 1101010
Somma di numeri negativi 106-64=42 bit di overflow complemento 64-42 = 22 verifica -22 64-22= 42 1101010 0*25+1*24+0*23+1*22+0*20 - 22
Somma Somma con un numero negativo (-10)+12 decimale binario -10 64-10 = 54 decimale binario 54+ 12= --- 66 110110+ 001100= ------- 1000010
Overflow 27+ 12= --- 39 011011+ 001100= ------- 0100111 64-39 = 25 -25 64-25= 39 Risultato: 27+12 = -25
Overflow -27 64-27= 37 -12 64-12= 52 37+ 100101+ 52= 110100= --- -27 64-27= 37 -12 64-12= 52 37+ 52= --- 89 100101+ 110100= ------- 1011001 89-64 = 25 Risultato: -27-12 = 25
Rappresentazione decimale e binaria dei razionali 5 4 5 : 4 = 1,25 10 20 1,2510 parte intera decimale parte frazionaria decimale in binario 101 100 101 : 100 = 1,01 100 1,012 parte intera binaria parte frazionaria binaria
Esempio 1 2,333..10 = 2,310 7 : 3 = 2,33.. 10 1 7 3 in binario 111 11 111 : 11 = 10,01001001.. 0100 100 10,0100100..2 = 10,0102
Esempio 2 7 : 5 = 1,4 20 7 5 1,410 in binario 111 101 111 : 101 = 1,0110001000.. 1000 110 1,0110001000..2 = 1,0110002
Irrazionali 3,141592....10 in binario ?
Parte frazionaria 0,1101001 2-1+ 2-2 + 2-4 + 2-7
moltiplicare per 2 significa spostare la virgola di un posto a destra 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 allora 2 0,99 = 1,98 = b1,b2b3...bk quindi b1 è 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
rappresentazione binaria di 0,59 Esempio 2 rappresentazione binaria di 0,59 0,592= 1,18 0,182= 0,36 0,362= 0,72 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 2e · 1,m implicito
Estensione dei numeri in virgola mobile 0 e 255 sono esponenti riservati: 1 e+127 254 quindi -126 e 127
Esempio 101001... 12,65 1100, ??? 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 23 s 0 m Rappresenta: 0 0,m < 1 quindi -2-126 < x < 2-126 x = s 2-126 0,m implicito
Rappresentazione dei Reali “grandi” 1 8 23 s 255 0 Rappresenta: 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. Rappresentazione dell’esponente: 0 000 00 = 0 000 01 = 0 000 10 = 0 000 11 = 0 001 00 = 0 001 01 = 0 001 10 = 0 001 11 = 0 010 00 = 0 010 01 = 0 010 10 = 0 010 11 = 2-2 ·2-2 2-2 ·2-1 2-2 ·(2-1 +2-2 ) 2-2 ·1 = 4/32 2-2 ·(1+2-2 ) 2-2 ·(1+2-1) 2-2 ·(1+2-1 +2-2 ) 2-1 ·1 2-1 ·(1+2-2 ) 2-1 ·(1+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 011 00 = 0 011 01 = 0 011 10 = 0 011 11 = 0 100 00 = 0 100 01 = 0 100 10 = 0 100 11 = 0 101 00 = 0 101 01 = 0 101 10 = 0 101 11 = 0 110 00 = 0 110 01 = 0 110 10 = 0 110 11 = 0 111 00 = 20 ·1 20 ·(1+2-2 ) 20 ·(1+2-1) 20 ·(1+2-1 +2-2 ) 21 ·1 21 ·(1+2-2 ) 21 ·(1+2-1) 21 ·(1+2-1 +2-2 ) 22 ·1 = 4 22 ·(1+2-2 ) 22 ·(1+2-1) 22 ·(1+2-1 +2-2 ) 23 ·1 23 ·(1+2-2 ) 23 ·(1+2-1) 23 ·(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.