La rappresentazione delle informazioni in un computer Seconda parte Operazioni in binario Poiché sistema decimale e sistema binario seguono entrambi le regole dei sistemi di numerazione posizionali lo stesso succede quando si vogliono fare operazioni aritmetiche Addizione Supponiamo di voler sommare due numeri ad otto bit Ad esempio 01011011 equivalente a 64+16+8+2+1=91 in base 10 e 00101110 equivalente a 32+8+4+2=46 Notiamo esplicitamente che abbiamo aggiunto all’inizio degli zeri per fare in modo che i due numeri siano entrambi costituiti da 8 bit Questa è una cosa che un essere umano normalmente non fa Non iniziamo mai un numero con zero ma con la prima cifra significativa diversa da zero Se proviamo a scrivere un numero sulla calcolatrice essa eliminerà automaticamente gli zeri che comporremo all’inizio Inoltre un essere umano non cerca di fare in modo che i numeri siano tutti della stessa lunghezza ma scrive tante cifre quante sono quelle che gli servono Infine un essere umano può sommare numeri anche di dimensioni diverse 1 7 4 + 8 4 3 2 = 8 6 0 6 Un’altra caratteristica dell’uomo è che può pensare e scrivere numeri con un numero di cifre qualsiasi Ha bisogno soltanto di abbastanza inchiostro Abbastanza carta… … e di tempo. Perché il Padreterno potrebbe avere altre idee al riguardo Un computer non ha invece questa capacità Per pensare dei numeri deve poterli scrivere da qualche parte Esso usa degli oggetti che si chiamano registri Ogni registro è costituito da celle ognuna delle quali memorizza un singolo bit Come tutto quello che è fabbricato dall’uomo, i registri hanno dimensioni standard ad esempio possono contenere 8 bit per cui la lunghezza massima dei numeri è pertanto prefissata Un processore con registri ad 8 bit può “pensare” soltanto numeri lunghi al massimo 8 bit Possiamo costruire un microprocessore con registri più lunghi ma il discorso non cambia Un microprocessore a 64 bit non potrà pensare numeri da 65 bit o oltre! Va tenuto poi conto che una cella di memoria può assumere soltanto due valori per cui può contenere soltanto 0 o 1 E’ per questo motivo che le celle iniziali anche se non sono utilizzate devono essere poste a zero Infine c’è il problema dei numeri negativi L’uomo utilizza i simboli + e – Vedremo che il computer utilizzerà il bit più a sinistra per rappresentare il segno del numero per cui ancora una volta è importante che i numeri abbiano la stessa lunghezza Torniamo alla nostra somma 0 1 0 1 1 0 1 1 + 0 0 1 0 1 1 1 0 Cominciamo a sommare partendo da destra come faremmo in decimale 1+0=1 0 1 0 1 1 0 1 1 + 0 0 1 0 1 1 1 0 = 1 Adesso dobbiamo sommare i bit in seconda posizione 1+1=2 ma in binario 2 si scrive con due bit 10 per cui vuol dire che dobbiamo scrivere 0 e riportare 1 La stessa cosa succedeva in decimale se sommavamo ad esempio 8+5. Il risultato fa 13 che in decimale non si può scrivere con una sola cifra per cui dovevamo scrivere 3 e riportare 1 1 riporto 0 1 0 1 1 0 1 1 + 0 0 1 0 1 1 1 0 = 0 1 Sommiamo ora i bit in terza posizione più il riporto 0+1+1 di riporto =2 cioè in binario 10 per cui si scrive 0 e si riporta 1 1 riporto 0 1 0 1 1 0 1 1 + 0 0 1 0 1 1 1 0 = 0 0 1 Sommando le quarte cifre più il riporto si avrà 1+1+1=3 che è pari in binario a 11 per cui si scrive 1 e si riporta 1 1 riporto 0 1 0 1 1 0 1 1 + 0 0 1 0 1 1 1 0 = 1 0 0 1 Questo è il risultato finale 0 1 0 1 1 0 1 1 + 0 0 1 0 1 1 1 0 = 1 0 0 0 1 0 0 1 La sottrazione Anche la sottrazione si può fare nello stesso modo con cui si fa una sottrazioen in decimale 1-0=1 0 1 0 1 1 0 1 1 + 0 0 1 0 1 1 1 0 = 1 1-1=0 0 1 0 1 1 0 1 1 + 0 0 1 0 1 1 1 0 = 0 1 Se adesso andiamo a sottrarre i bit di posizione 3 vediamo che 0è più piccolo di 1 per cui è costretto a farsi fare un prestito Ragioniamo ora su come operavavamo in decimale Quando si faceva un prestito dalla cifra superiore il prestito valeva 10 In quest’esempio 2 deve farsi fare un prestito e diventa 12 quindi si è fatto prestare 10 [PROPRIO IL VALORE DELLA BASE!!!] 3 2 4 - 1 5 2 = 1 7 2 IN MANIERA ANALOGA IN BINARIO SE UNA CIFRA SI FA FARE UN PRESTITO, IL PRESTITO VALE QUANTO LA BASE CIOE’ 2 QUINDI NELL’OPERAZIONE CHE STAVAMO FACENDO 0 SI FA FARE UN PRESTITO E DIVENTA 2, LE SI SOTTRAE 1 E DIVENTA 1 prestito di 2 0 1 0 1 1 0 1 1 + 0 0 1 0 1 1 1 0 = 1 0 1 Il bit in quarta posizione, facendo un prestito, è diventato 0 per cui ha bisogno a sua volta di un prestito Diventa 2 e le si sottrae 1 prestito di 2 0 1 0 1 1 0 1 1 + 0 0 1 0 1 1 1 0 = 1 1 0 1 PROSEGUENDO… 0 1 0 1 1 0 1 1 + 0 0 1 0 1 1 1 0 = 0 0 1 0 1 1 0 1 Facendo le sottrazioni possiamo avere risultati negativi E’ dunque necessario capire come il computer rappresenta i numeri negativi Proviamo ad esempio ad eseguire l’operazione 27-46 Il risultato è il seguente 0 0 0 1 1 0 1 1 + 0 0 1 0 1 1 1 0 = 1 1 1 0 1 1 0 1 Il risultato avrebbe dovuto essere -19 In effetti la stringa di bit che abbiamo otttenuto rappresenta il numero -19 ma con una tecnica particolare che si chiama complemento a due 1 1 1 0 1 1 0 1 La rappresentazione di un numero negativo si ottiene nel seguente modo Si prende il numero positivo corrispondente Cominciando da sinistra si inverte ogni bit (se è 0 lo si trasforma in 1 e viceversa) Quando si arriva all’ultimo 1 della stringa ci si ferma: quel bit e tutti i bit che lo seguono non vanno modificati Quello che otteniamo è il corrispondente numero negativo Esempio + 27 0 0 0 1 1 0 1 1 - 27 1 1 1 0 0 1 0 1 Esempio 2 + 42 0 0 1 1 0 0 1 0 - 42 1 1 0 0 1 1 1 0 La prima cosa che si nota è che se il numero è positivo comincia con 0 Se il numero è negativo comincia da 1 Noi stavamo calcolando 27- 46 0 0 0 1 1 0 1 1 + 0 0 1 0 1 1 1 0 = 1 1 1 0 1 1 0 1 Il risultato avrebbe dovuto essere -19 In effetti la stringa di bit che abbiamo otttenuto comincia con 1 quindi è effettivamente un numero negativo 1 1 1 0 1 1 0 1 In effetti facendo il complemento a due si ottiene +19 quindi effettivamente quella stringa di partenza rappresenta -19 + 19 1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 1