Rappresentazione delle variabili L’ hard-disk di un computer è costituito da un sottile strato di materiale magnetico e le informazioni vengono memorizzate magnetizzando alcune porzioni del disco. Fissata una porzione del disco, essa può avere solo due stati, ovvero (1) magnetizzata o (2) smagnetizzata. Quindi, la minima quantità scrivibile su disco, il bit, può memorizzare al massimo 2 valori: uno 0, ad esempio, se il bit è smagnetizzato ed un 1 se il bit è magnetizzato. Si pone quindi il problema di trovare un metodo per scrivere tutto ciò che abitualmente utilizziamo (caratteri, numeri, immagini, …) usando un codice la cui unità minima è formata da 2 elementi (in questo caso 1 e 0). [-> posso contare al massimo 2 elementi] Tale codice è rappresentato dal sistema binario. Cominciamo dal capire come i numeri interi possano essere rappresentati con il codice binario. Noi abitualmente contiamo in base dieci, ovvero raggruppiamo gli elementi in gruppi di 10, 100 (= 10 * 10 ), 1000 (= 10 * 10 * 10)… elementi. Infatti 1345 significa che abbiamo 5 unità, 4 gruppi da 10 elementi, 3 gruppi da 10 * 10 = 100 elementi e 1 gruppo da 10 * 10 * 10 = 1000 elementi. Per analogia, se contiamo in base 2 significa che dovremmo scomporre il numero totale di elementi in gruppi da 2, 4 (= 2 * 2), 8 (= 2 * 2 * 2), … . L’equivalente della decina sarà quindi un gruppo da 4 elementi, l’equivalente del centinaio sarà un gruppo da 8 e via così. Proviamo ora a fare un esempio. Prendiamo 47 e cerchiamo di rappresentarlo usando il codice binario. Per comodità scriviamoci alcune potenze di 2 (l’equivalente delle decine): 2 (=21), 4 (=22), 8 (=23), 16 (=24), 32 (=25), 64 (=26), 128 (=27) … Nel 47 ci sta al massimo un gruppo da 32 (64 è troppo grande), quindi ci sta un gruppo di oggetti corrispondente alla quinta decina. 47 – 32 = 15 In quindici ci sta al massimo un gruppo da 8, ovvero corrispondente alla terza potenza di 2 15 – 8 = 7 In 7 ci sta al massimo un gruppo da 4, ovvero corrispondente alla seconda potenza di 2 7 – 4 = 3 In 3 ci sta al massimo un gruppo da 2, ovvero corrispondente alla prima potenza di 2 3 – 2 = 1 1 corrisponde alla potenza di 2 di ordine 0 Ok ! 47 = 1 * 25 + 0 * 24 + 1 * 23 + 1 * 22 + 1 * 21 + 1 * 20
Ora, tanto maggiore è il numero di bit che ho a disposizione, tanto maggiore sarà il numero che è possibile rappresentare in notazione binaria. Ad esempio, se ho solo un bit posso arrivare al massimo ad 1; con 2 bit posso arrivare a 3; con 3 bit a 7, … , con 8 bit a 255, con 32 bit a 4294967295, con N bit fino a 2N – 1. Un modo un po’ più rapido di effettuare il calcolo è il seguente: prendiamo spunto dalla rappresentazione decimale e cerchiamo di rappresentare 47 in base 10. 47 % 10 = 7 (ottengo la cifra delle unità) se divido 47 per 10 ottengo un intero (47 e 10 sono interi e quindi 47 / 10 è ancora rappresentato come un intero) che rappresenta la cifra delle decine 4 % 10 = 4 ( ovvero quante unità da 10 elementi possiedo) se divido ancora per 10 trovo 0 0 % 10 = 0 (ovvero possiedo 0 unità da 100 elementi) Cominciando a riempire la tabella da destra verso sinistra:
Ora facciamo la stessa cosa ragionando in base 2 47 % 2 = 1 (ho un’unità in base 2) 47 / 2 = 23 (sto sempre lavorando con interi !) 23 % 2 = 1 (ovvero ho un’unità di 2 elementi) 23 / 2 = 11 11 % 2 = 1 (ho un’unità di 4 elementi) 11 / 2 = 5 5 % 2 = 1 (ho un’unità di 8 elementi) 5 / 2 = 2 2 % 2 = 0 (non ci sono unità da 16 elementi) 2 / 2 = 1 1 % 2 = 1 (un’unità da 32 elementi) 1 / 2 = 0 fine del calcolo Seguendo la medesima procedura per produrre la sequenza:
Sono quindi riuscito a rappresentare un intero arbitrario in notazione binaria. Come vedremo in seguito, anche i caratteri si possono considerare degli interi, quindi per ora in linea di principio siamo in grado di rappresentare in notazione binaria sia numeri interi che caratteri. Più avanti durante il corso vedremo come rappresentare anche i numeri decimali. |