Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice anche che i numeri sono rappresentati in base 0. Le cifre possiedono un valore posizionale, cioè un valore a seconda della posizione occupata nella scrittura del numero. Quindi cifre uguali in posizioni diverse hanno significato diverso (si dice anche che hanno peso diverso, cioè pesano diversamente nella determinazione del valore del numero espresso). Per esempio nel numero 434 la prima cifra 4 vale 400, 4 centinaia (potenza di 0 con esponente 2), la cifra 3 vale 30 (potenza di 0 con esponente ) e la cifra 4 vale 4 unità (potenza di 0 con esponente 0) 4 3 4 = 4 x 0 2 + 3 x 0 + 4 x 0 0 aaa 0 2 0 0 0 posizione 0 posizione posizione 2 Il peso di una cifra è uguale alla base del sistema di numerazione (0, in questo caso) elevata alla potenza uguale alla posizione della cifra nel numero. Per esempio nel numero 434 il 4 in posizione 2 pesa 0 2 =00; il 3 in posizione pesa 0 =0 e il 4 in posizione 0 pesa0 0 = In Informatica viene ampiamente usato un altro sistema di numerazione, il sistema binario (numeri in base 2). Il sistema binario si lega strettamente alla tecnologia del funzionamento dei computer in quanto il computer utilizza dispositivi elementari che possono assumere solo due stati ai quali vengono associate le cifre 0 e che sono appunto le cifre del sistema binario. Nel linguaggio informatico le cifre binarie vengono indicate con il termine bit, dalla contrazione delle due parole inglesi BInary digit (cifra binaria). Il bit assume i valori 0 e con bit possiamo rappresentare 2 = 2 valori con 2 bit possiamo rappresentare 2 2 = 4 valori con 3 bit possiamo rappresentare 2 3 = 8 valori con n bit possiamo rappresentare 2 n valori. Si guarda il numero a partire da destra, la posizione parte da zero e si incrementa da destra a sinistra Con n bit, i valori naturali rappresentabili sono compresi nell intervallo [0, 2 n -] Con n bit, i valori interi rappresentabili sono compresi nell intervallo [-2 n-, 2 n- -] Nei numeri interi rappresentati in binario, il primo bit (quello più a sinistra) rappresenta il segno: 0=segno positivo =segno negativo ESEMPIO: con n=3 bit possiamo rappresentare 2 3 = 8 valori I numeri naturali rappresentabili appartengono all intervallo [0, 2 3 -] = [0, 7] I numeri interi rappresentabili appartengono all intervallo [-2 3-, 2 3- -] = [-2 2, 2 2 -] = [-4, 3] Quindi se voglio rappresentare il numero naturale 5, mi bastano 3 bit, ma se il numero 5 è intero, 3 bit non ci bastano.
In modo analogo al sistema decimale, le cifre del sistema binario 0 e assumono un valore posizionale nella scrittura del numero binario con riferimento alle potenze di 2, anziché alle potenze di 0. CONVERSIONE da base BINARIA a DECIMALE Se vogliamo convertire il numero binario 0 da base binaria a base decimale, per prima cosa prendiamo il numero da destra verso sinistra e cominciamo a scrivere sotto ogni numero, la base 2 (perché il numero è binario) elevata alla posizione che occupa (la posizione parte da 0 e si incrementa andando verso sinistra) 0 2 3 2 2 2 2 0 poi si moltiplica ciascuna cifra binaria a partire da destra per la corrispondente potenza di e si sommano i prodotti ottenuti. Vedi ESEMPIO x x x 0 + + x + = = x + 0x2 + x4 + x8 = + 0 + 4 + 8 = 3 2 3 2 2 2 2 0 quindi = x2 0 + 0x2 + x2 2 + x2 3 si ricorda che 2 = 2 2 0 = Riepilogando ( 0 ) 2 = (x2 0 + 0x2 + x2 2 + x2 3 ) 0 = x (x numero + 0x2 = + numero x4 + x8) 0 = 2 3 2 2 2 2 0 ( + 0 + 4 + 8) 0 = (3) 0 Base di partenza Volendo essere sicuri 2=binario che abbiamo applicato la regola correttamente e 0=decimale che i calcoli siano corretti, e cioè che effettivamente 0 2 corrisponda a 3 0, possiamo fare la PROVA facendo il procedimento inverso, cioè prendere il numero decimale ottenuto cioè 3 e trasformarlo in binario (vedi il paragrafo che segue x capire come fare) e vedere se il numero binario trovato coincide con 0 2. Se coincide, vuol dire che quanto fatto era giusto, altrimenti vuol dire che avevamo commesso errori durante il procedimento e dobbiamo ricontrollare il tutto. CONVERSIONE da base DECIMALE a BINARIA Per convertire un numero decimale (numero positivo e senza virgola) a un numero binario, si divide il numero dato per 2 e si scrive il resto (che può essere 0 o ); il quoziente ottenuto viene a sua volta diviso per 2 ottenendo un nuovo resto; si prosegue fino a quando si ottiene come quoziente il numero 0. La sequenza dei resti, letta dall ultimo resto ottenuto al primo, fornisce il numero binario corrispondente al numero decimale dato. dividendo 5 2 divisore Si ricorda che nella divisione 5 / 2 = 7 con resto 4 7 quoziente resto 00 2 00 50 2 0 50 25 2 0 24 2 2 2 6 2 si può 0 6 3 2 anche 0 2 2 scrivere 0 0 ( 0 0 ) 0 = ( 0 0 0 0 ) 2 Il numero binario si ottiene scrivendo i resti delle divisioni, iniziando dall ultimo resto ottenuto 0 x numero=0 Base di arrivo 2
Se vogliamo essere sicuri di aver calcolato correttamente il numero binario a partire dal numero decimale (nel nostro esempio 00 0 ), possiamo fare la PROVA facendo il procedimento inverso, cioè prendiamo il numero binario trovato (0000) 2 e lo ritrasformiamo in decimale. Se il risultato coincide con il numero decimale di partenza, allora il numero binario trovato è corretto. ESEMPIO di PROVA: abbiamo appena trasformato il numero decimale 00 in binario e cioè 0000 ( 0 0 ) 0 = ( 0 0 0 0 ) 2 La prova consiste nel fare il procedimento inverso (cioè da binario a decimale) e vedere se i decimali coincidono. ( 0 0 0 0 ) 2 = ( 0x2 0 + 0x2 + x2 2 + 0x2 3 + 0x2 4 + x2 5 + 2 6 2 5 2 4 2 3 2 2 2 2 0 x2 6 ) 0 = (4 + 32 + 64) 0 = (00) 0 Poiché dalla trasformazione del binario abbiamo ottenuto il numero decimale 00 che è lo stesso numero decimale da cui eravamo partiti inizialmente, deduciamo che il numero binario calcolato è corretto. Somme in binario OPERAZIONI in BINARIO La somma di due numeri binari viene calcolata adattando le stesse regole della somma dei numeri decimali: si ha un riporto in binario (rispettivamente per la notazione decimale) se la somma in qualunque posizione è maggiore di (rispettivamente 9 per la notazione decimale). Le somme in binario quindi possiamo dire che si effettuano secondo la seguente regola: Si ricorda che nella somma 5 + 2 = 7 5 è il addendo, 2 è il 2 addendo e 7 è la somma ES: Effettuiamo la somma 00 2 + 00 2 Si parte a sommare da destra (come accade con i numeri decimali) riporti 0 0 2 + 0 0 2 = 0 0 0 2 + = 0 e riporto di +0+ lo eseguo così: (+0)+=+=0 e riporto di ++0 lo eseguo così: (+)+0=0(e riporto)+0 =0 quindi 0 e riporto di ++ lo eseguo così: (+)+=0(e riporto)+ = quindi e riporto di +0+0 lo eseguo così: (+0)+0=+0 = senza riporto +(niente è come se ci fosse lo 0)=+0 = Per essere sicuri di aver eseguito correttamente la somma si può fare la PROVA. 3
La PROVA consiste nel trasformare tutti i numeri binari (i due addendi e la somma) in decimali e fare la somma dei corrispondenti addendi decimali. Se quest ultima coincide con la trasformazione in decimale della somma binaria, allora abbiamo calcolato correttamente la somma tra binari. Nell esempio appena svolto, abbiamo trovato che 00 2 + 00 2 = 000 2 Facciamo la PROVA per verificare che la somma che abbiamo calcolato è corretta. Trasformiamo tutti i numeri binari in decimale: 00 2 = x2 0 + 0x2 +x2 2 +x2 3 + 0x2 4 + x2 5 = + 4 + 8 + 32 = 45 00 2 = x2 0 +x2 + 0x2 2 + x2 3 + 0x2 4 = + 2 + 8 = 000 2 = 0x2 0 + 0x2 + 0x2 2 + x2 3 + x2 4 + x2 5 = 8 + 6 + 32 = 56 Ora 45 + = 56 che coincide con il decimale di 000 2 cioè quindi la somma binaria calcolata è corretta. Rappresentazione di numeri interi Ricordiamo che con n bit possiamo rappresentare 2 n valori. Con n bit, i valori naturali rappresentabili sono compresi nell intervallo [0, 2 n -] Con n bit, i valori interi rappresentabili sono compresi nell intervallo [-2 n-, 2 n- -] Nei numeri interi rappresentati in binario, il primo bit (quello più a sinistra) rappresenta il segno: 0=segno positivo =segno negativo n è la dimensione (in bit) della cella di memoria che contiene il numero. Per i numeri interi positivi (così come accade per i numeri naturali) si usa la rappresentazione binaria posizionale (000) 2 = (44) 0 Per rappresentare i numeri interi negativi non si può usare la stessa codifica dei numeri positivi impostando semplicemente a il primo bit; se così facessimo infatti la somma di un numero con il suo opposto non sarebbe zero. Infatti si osservi l esempio seguente in cui per comodità ci serviamo di una parola di 8 bit (n=8) scrivendo in grassetto il primo bit del segno: numero decimale + 7 codifica binaria impostazione degli 8 bit 0 0000 numero decimale - 7 codifica binaria impostazione degli 8 bit 0000 Se sommiamo i numeri binari dei due byte così ottenuti abbiamo 0 0000 + 0000 = 0000 Il numero ottenuto non corrisponde a 0. Dobbiamo allora trovare una codifica per i numeri negativi tale che la somma di un numero con il suo opposto produca 0 come risultato. COME RAPPRESENTIAMO I NUMERI INTERI NEGATIVI? ) dobbiamo conoscere n cioè quanti bit abbiamo a disposizione per rappresentare il numero; 2) dobbiamo rappresentare in binario il numero positivo (possiamo anche fare la PROVA per essere certi della conversione in binario); 3) dobbiamo aggiungere in testa al numero binario positivo trovato al punto 2), tanti zeri fino ad avere n bit; 4) trovare il numero negativo a partire dal numero trovato al punto 3) con questa semplice regola pratica: ricopiare, partendo da destra le stesse cifre fino a quando si incontra il primo (compreso). Dopodiché invertire le cifre rimanenti trasformando gli in 0 e viceversa; 5) per verificare (PROVA) che il numero negativo trovato sia corretto, basta sommare il numero positivo con il suo corrispondente negativo e verificare che la somma produca 0 come risultato. 4
ESEMPIO: rappresentare il numero intero -7 usando n=8 bit. Rappresentiamo il numero positivo 7 in binario. 7 2 6 3 2 7 0 = 2 aggiungo tanti zeri fino ad arrivare a n=8 cioè 5 zeri 2 2 7 0 = 00000 2 ora calcolo -7 con la regola pratica 0 0-7 0 = 00 2 Per verificare che il numero negativo sia corretto facciamo la prova cioè verifichiamo che 7 + (-7) = 0 riporti 7 0 = 0 0 0 0 0 + -7 0 = 0 0 = 0 0 0 0 0 0 0 0 n=8 questi n=8 bit sono tutti zero quindi il numero negativo trovato è corretto. Quindi -7 0 = 00 2 ESEMPIO: rappresentare il numero intero -44 usando n=8 bit. Rappresentiamo il numero positivo 44 in binario. 44 2 44 0 = 000 2 verifichiamo che la codifica binaria trovata sia corretta 44 22 2 000 2 = 0x2 0 +0x2 +x2 2 +x2 3 +0x2 4 +x2 5 =0+0+4+8+0+32=44 0 il numero 0 22 2 binario è corretto. Quindi 0 0 5 2 44 0 = 000 2 aggiungiamo tanti zeri fino ad avere n=8 bit 4 2 2 44 0 = 00000 2 ora calcoliamo -44 con la regola pratica 2 2-44 0 =0000 2 0 0 0 Per verificare che il numero negativo sia corretto facciamo la prova cioè verifichiamo che 44 +(-44)=0 riporti 44 0 = 0 0 0 0 0 + -44 0 = 0 0 0 0 = 0 0 0 0 0 0 0 0 n=8 questi n=8 bit sono tutti zero quindi il numero negativo trovato è corretto. Quindi -44 0 = 0000 2 5
Ricordiamo che CALCOLO DEL VALORE DI VERITA DI UN ESPRESSIONE BOOLEANA Ordine di precedenza degli operatori: NOT, AND, OR/XOR Questo significa che: ) NOT ha precedenza più alta di AND, OR e XOR; per esempio: NOT a AND NOT b OR NOT c equivale a scrivere (NOT a) AND (NOT b) OR (NOT c) 2) AND ha precedenza più alta di OR e XOR, per esempio: a AND b OR c equivale a scrivere (a AND b) OR c ESEMPIO: Siano a = F, b = V, c = F (dove V = Vero e F = Falso) Calcolare il valore di verità della seguente espressione booleana mostrando tutti i passaggi per trovare la soluzione: NOT b OR c AND NOT a OR ( c AND NOT b ) Soluzione: NOT b OR c AND NOT a OR ( c AND NOT b ) = NOT V OR F AND NOT F OR ( F AND NOT V ) = F OR F AND V OR (F AND F ) = F OR F OR F = F OR F = F Sostituisco i valori di verità alle variabili Eseguo le operazioni rispettando l ordine di precedenza degli operatori (sottolineo le operazioni che eseguo ad ogni passaggio) ESEMPIO: Siano a = 7, b = 2 Calcolare il valore di verità della seguente espressione booleana mostrando tutti i passaggi per trovare la soluzione: ( b 3 ) OR NOT ( a < 7 ) AND ( b > 7 ) Soluzione: ( b 3 ) OR NOT ( a < 7 ) AND ( b > 7 ) = ( 2 3 ) OR NOT ( 7 < 7 ) AND ( 2 > 7 ) = F OR NOT F AND V = F OR V AND V = F OR V = V Sostituisco i valori numerici alle variabili Calcolo il valore di ogni operazione di confronto Eseguo le operazioni rispettando l ordine di precedenza degli operatori (sottolineo le operazioni che eseguo ad ogni passaggio) 6