Seleziona il capitolo della lezione |
|
|
INFORMATICA DI BASE |
Come abbiamo accennato precedentemente, gli attuali
calcolatori, come quasi tutti i circuiti elettronici che trattano dati in forma
numerica, si basano sul sistema digitale. Elaborano cioè ogni tipo di dato attraverso segnali che possono avere solo due stati logici: 0 e
1; vero o falso; c'è o non c'è tensione, ecc..
Si
attribuisce allo stato logico 0 l'assenza di tensione (livello basso), mentre si
attribuisce allo stato logico 1 la presenza di tensione (livello alto).
I circuiti che funzionano in questo modo (digitale) risultano
notevolmente più semplici rispetto a quelli lineari (analogici) ed anche meno
costosi. I circuiti digitali offrono anche una maggior affidabilità ed un
livello molto alto di immunità al rumore, cioè dai disturbi provocati da
scariche elettriche, dalla vicinanza di forti campi magnetici ecc..
La memorizzazione di segnali in questa forma, risulta molto più semplice e sicura. E' per questi motivi che il futuro si muove con l'elettronica digitale.
Come è intuibile, questo "modo di vedere" le cose si discosta notevolmente dalle nostre abitudini, in quanto si basa unicamente su due estremi e di conseguenza si dice che ogni rappresentazione viene espressa in binario.
I simboli numerici, o numeri, furono inventati per facilitare i calcoli. Vari sistemi numerici differiscono nel posizionamento e nel tipo di simboli numerici usati.
La razionalità, pur lenta ma in continuo miglioramento, dei sistemi di notazione numerica e le regole aritmetiche su esse costruite, sono da considerarsi in intimo contatto con il progresso della matematica e delle scienze in genere. I capitoli che seguono offrono una breve rassegna delle basi dei moderni sistemi di numerazione, della loro "manipolazione" aritmetica e della conversione dal sistema binario e di notazione esadecimale, entrambi i quali sono usati nella elaborazione dei dati.
L'algebra booleana (il cui nome deriva dal matematico inglese GEORGE BOOLE che sviluppò tale algebra verso la meta' dell'800), tratta le variabili binarie (dette anche variabili logiche). Le operazioni dell'algebra booleana, assieme alle regole che la governano, servono per trattare le variabili binarie nelle stesso modo in cui l'algebra "ordinaria" tratta i numeri reali ed i loro infiniti valori.
La connessione tra l'algebra di BOOLE ed i computers sta nel fatto che le informazioni manipolate e contenute nei circuiti dei calcolatori vengono rappresentate attraverso combinazioni di questi due valori (zero e uno).
Vediamo i principi che stanno alla base dell'algebra di Boole, richiamando e successivamente confrontando il sistema di numerazione decimale, con il sistema di numerazione binario.
NOTAZIONI
POSIZIONALI:
Il SISTEMA DI NUMERAZIONE DECIMALE
Gli arabi inventarono i simboli numerici ed il sistema della notazione posizionale sui quali si basano l'attuale nostro sistema decimale ed altri sistemi numerici. Ciascuno dei simboli ha un valore fisso di un'unità superiore a quello che lo precede nella progressione dal più piccolo al più grande: 0,1,2,3,4,5,6,7,8,9. I valori maggiori di 9 si formano accostando tali simboli in diverse combinazioni. In questo modo il valore del numero dipende sia dalle relative posizioni di ogni singola cifra che dal valore della stessa (X Unità, X Decine, X Centinaia, ecc.).
In qualsiasi sistema di notazione posizionale, la posizione della cifra all'estrema destra è quella di valore più basso ed è chiamata "Least significant digit" (LSD) (cifra meno significativa), la cifra all'estrema sinistra è quella che esprime il valore maggiore ed è chiamata “Most significant digit" (MSD) (cifra più significativa o di massimo ordine).
L'incremento in valore della posizione di ogni digit dipende dalla base (o radice) del sistema di numerazione. Nel sistema di numerazione decimale, cioè a base 10 (perchè tanti sono i simboli usati; da 0 a 9), il valore delle posizioni dalla cifra a sinistra aumenta di una potenza di 10 per ciascuna posizione. Per chiarire meglio; alle potenze in base 10 si dà il nome di pesi: Es. 5.10º significa 5 per dieci con peso 0, cioè 5 unita';
5.10¹ significa 5 per 10 con peso 1, cioè 5 decine; e cosi, via.
3 | 2 | 1 | 0 | -1 | -2 | -3 | |
Potenze di 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 |
Valore decimale | 1.000 | 100 | 10 | 1 | 0,1 | 0,01 | 0,001 |
Conosciuti come | migliaia | centinaia | decine | unità | decimi | centesimi | millesimi |
Anche se non siamo abituati a rappresentare i numeri in questo modo, tale sistema risulta molto più comodo e semplifica notevolmente il calcolo delle operazioni.
Per esempio, se volessimo calcolare (senza calcolatrice ovviamente) 7: 3.500= dovremmo avere a disposizione un foglio di carta ed una biro e procedere nel modo che tutti conosciamo. E' però possibile attraverso questo metodo, fare i calcoli mentalmente o almeno renderli molto più semplici eseguendo questi passaggi:
7:3500 = si può anche scrivere 7:(3,5.10³)= quindi il calcolo si riduce a 7:3,5 e non serve la calcolatrice per dire che il risultato è 2 mentre il 10³ in questo caso viene riportato ( sempre come moltiplicatore) al di là dell'uguale ma a causa di questo passaggio gli viene invertito il segno del peso, ottenendo così:
7/(3,5 . 10³)=
2 . 10-³ , oppure 0,002 decimale.
Moltiplicare ad esempio 150.000 x 200.000 nel metodo
abituale diventa abbastanza laborioso, ma potremmo utilizzare le potenze di 10 e
quindi ridimensionare tali numeri rendendoli tanto piccoli da poterne eseguire
il calcolo mentalmente:
150.000
x 200.000 = potrebbe essere rappresentato anche come :
(15 . 10 alla 4 ) x (2 . 10 alla 5)=
Ora raggruppiamo i pesi (essendo una moltiplicazione, si
sommano) e l'operazione diventa:
(15 x 2) .10 alla 9 = 30 .10 alla 9 = 30 con l'aggiunta di 9 zeri,
cioè
30.000.000.000
IL
SISTEMA DI NUMERAZIONE BINARIO
In modo simile (almeno intuitivamente) funziona la
numerazione binaria, anche se in un primo momento può sembrare incomprensibile
o almeno difficile (come tutte le cose nuove che si cerca di imparare) in realtà
e' molto semplice una volta appreso il meccanismo. Siccome il computer e' una
macchina e come tale e' quindi stupida, cioè non ragiona e non ha intelligenza,
diventerebbe molto complesso farla lavorare col sistema decimale a causa della
difficoltà legata al controllo di
diverse tensioni (una tensione per ogni numero rappresentabile,
in definitiva troppe). Si usa allora il sistema binario in quanto
impedisce alla macchina di “confondere" dati, usando due soli segnali (1
e 0) denominati bit (abbreviazione di
BINARY DIGIT, cioè cifra
binaria), che indicano in pratica che c'è o non c'è tensione. La numerazione
binaria (invece che base 10) ha base 2 e le cifre in forma binaria vengono
posizionate dai relativi pesi, che naturalmente sono potenze in base due.
Decimale |
Binario |
0 |
0 |
1 |
1 |
2 |
10 |
3 |
11 |
4 |
100 |
5 |
101 |
6 |
110 |
7 |
111 |
8 |
1000 |
9 |
1001 |
10 |
1010 |
11 | 1011 |
12 | 1100 |
13 | 1101 |
14 | 1110 |
15 |
1111 |
In
informatica si lavora a livello di byte,
ossia gruppi di 8 bit in sequenza: con un byte si può rappresentare qualsiasi
carattere del codice ASCII, sia esso una lettera, un numero o un carattere
speciale.
Il
codice ASCII (American Standard Code for
Information Interchange) è un insieme di 256 caratteri, ciascuno dei quali
è la "traduzione" nel sistema binario di tutti i caratteri
alfanumerici e dei simboli utilizzati nei PC (256 è esattamente il numero delle
combinazioni dei valori 0 e 1, presi 8 alla volta). Ad esempio, il carattere
"C" maiuscolo ha codice ASCII 67, il numero "9" ha codice
ASCII 57, e così via. Se premiamo il tasto ALT e, mantenendo la pressione,
digitiamo uno qualsiasi dei numeri da 0 a 256, al rilascio del tasto ALT apparirà
un carattere (ad eccezione dei codici da 1 a 31 che corrispondono a codici di
controllo e non appaiono sullo schermo).
I byte vengono utilizzati, tra l'altro, per misurare la capacità di memoria dei dischi: si parla, a tal proposito, di Kilobyte, Megabyte, Gigabyte e Terabyte (si veda lo specchietto riassuntivo):
Unità |
simbolo |
equivale a: |
bit |
|
può assumere i valori 0 oppure 1 |
Byte |
|
8 bit |
Kilobyte |
K, KB |
1024 Byte |
Megabyte |
MB |
1024 KB |
Gigabyte |
GB |
1024 MB |
Terabyte |
TB |
1024 GB |
Vediamo ad esempio come si può esprimere il numero binario 100111(si legge: uno, zero, zero, uno, uno, uno), nell'equivalente decimale.
1 | 0 | 0 | 1 | 1 | 1 |
5 | 4 | 3 | 2 | 1 | 0 |
(1x2) | + (0x2 ) | + (0x2 ) | + (1x2 ) | + (1x2) | + (1x2) |
ll
valore decimale ad esso corrispondente e' dato dalla somma di tutti i prodotti
dei bit 1 (cioè solo i più significativi
), per i pesi relativi (corrispondenti) , cioè:
5 | 2 | 1 | 0 |
|
(1x2 ) | + (1x2 ) | + (1x2 ) | + (1x2) | = |
( 34 ) + ( 4 ) + ( 2 ) + (1 ) =
In pratica, per calcolare l'equivalente valore decimale di un numero espresso in forma binaria, esiste un metodo molto semplice (ma non l'unico):
Si costruisce una tabella di numerazione a base 2, con il
corrispondente valore decimale attribuito al bit 1, posto in quella determinata
casella; in pratica:
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
ò | ò | ò | ò | ò | ò | ò | ò | ò |
256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 0 |
Se per esempio dovessimo calcolare il valore decimale del numero
binario 10011, non dovremmo far altro che sommare tra loro i valori decimali
delle caselle evidenziate dai bit significativi (i bit 1).
5 | 4 | 3 | 2 | 1 | 0 | ||
2 | 2 | 2 | 2 | 2 | 2 | ç Pesi in base 2 | |
32 | 16 | 8 | 4 | 2 | 1 | ç Corrispondenti decimali | |
1 | 0 | 0 | 1 | 1 | ç Numero binario |
Consideriamo valide solo le caselle occupate dal bit 1,
avremo quindi, iniziando a contare da destra verso
sinistra:
a)valore decimale 1
(vale perché occupato dal bit 1)
b)sommato al valore decimale 2 (vale perché occupato dal
bit 1)
c)sommato al valore
decimale 16 (vale perché occupato dal bit 1)
Il corrispondente valore decimale in questo caso vale 16 + 2 + 1 = 19
Anche i numeri binari frazionari vengono rappresentati con criteri
analoghi a quelli osservati per i numeri frazionari del sistema decimale.
Naturalmente lo spostamento della virgola di una posizione verso destra o verso
sinistra, raddoppia a dimezza il valore (in decimale) degli stessi numeri. Se
consideriamo per esempio il numero binario : 1,10010 il
suo equivalente decimale e':
0
-1
-2
-3
-4
-5
(1x2 ) +
(1x2 ) +
(Ox2) +
(0x2) +
(1x2) +
(0x2) =
= (1) + (1/2)+ (1/16) = 16/16 + 8/16 + 1/16 = (16 + 8
+ 1)/16 = 25/16
Spostando la virgola di un posto verso destra, il numero espresso in
forma binaria diventa 11,0010; mentre il suo equivalente decimale diventerà
50/16 oppure 25/8.
L’algebra di BOOLE, per quanto possa sembrare complessa a noi, in effetti semplifica le cose nei riguardi della rappresentazione (e quindi della elaborazione) di valori decimali da parte della macchina, in quanto qualsiasi numero decimale si può scrivere usando combinazioni di due sole cifre (i bit 1 e 0).
Come e' facile intuire gli unici valori decimali che coincidono con
quelli binari sono 1 e 0. Vale a dire, il bit 1 indipendentemente dalla
posizione che occupa (nella rappresentazione del numero), vale 1 sia nell'uno
che nell'altro sistema di numerazione; cosi' dicasi per il bit 0 che in entrambi
i sistemi non ha "nessun significato" se non quello di evidenziare una
“posizione" .
PASSAGGIO
DAL SISTEMA DECIMALE A QUELLO BINARIO
Metodo
della divisione per due
Per, rappresentare in forma binaria un qualsiasi numero decimale, si può
usare la tabella e procedere in modo inverso a quello visto precedentemente cioè
per sottrazioni successive (e' pero' laborioso se si deve lavorare con un numero
alto di cifre) .
Oppure si può seguire il metodo della divisione per due che e'
certamente il più comodo. Esso consiste nel dividere il numero decimale per
due, il quoziente ottenuto lo si divide ancora per due e così via finché si
ottiene un quoziente non più divisibile per tale numero (in pratica a lo 0 o
l'1).
L'espressione del numero binario corrispondente è data dalla
successione dei resti a partire dall'ultimo trovato . Proviamo ad esempio a
convertire in binario il numero decimale 59.
Quoziente | Resto | ||
59 | 1 | ç | 59 : 2 = 29 con resto di 1 e
così via |
29 | 1 | ||
14 | 0 |
||
7 | 1 | ||
3 | 1 | ||
1 | 1 | ç | L’ultimo, non più divisibile, lo riportiamo nei resti |
Ø | Ú |
Si allineano quindi (da sinistra verso destra) i bit 1 e 0
corrispondenti ai resti, partendo dall'ultimo trovato: il numero decimale 59, in
forma binaria si rappresenta quindi così: 111011.
Vediamo ora le due operazioni fondamentali (somma e sottrazione);
fondamentali perché è in questo modo che il
calcolatore esegue tutte le operazioni (non conosce divisione,
moltiplicazione, ecc.).
Per essere più chiari, il calcolatore esegue la divisione col metodo
delle sottrazioni successive; in pratica se deve dividere un certo numero per x,
sottrae tante volte x fino ad ottenere un valore tanto piccolo da essere
ritenuto trascurabile ed ogni volta incrementa un particolare registro di
memoria (contatore) ed al termine dell'operazione ci "renderà”
il valore contenuto in tal registro come risultato dell'operazione
stessa. Il procedimento contrario avviene invece per la moltiplicazione (cioè
per somme successive).
Per noi "comuni mortali" é comunque possibile procedere con
gli stessi principi che regolano i calcoli nel sistema decimale, badando bene
però di rispettare le regole che vedremo più avanti.
SOMMA
TRA NUMERI BINARI
Se per esempio vogliamo sommare i numeri binari: 1010011 e 100101,
incolonniamo le rispettive cifre (bit) di tali numeri facendo attenzione ad
incolonnare in base alla virgola :Es.
1 | 1 | 1 |
Ü
riporto |
||||||
1 | 0 | 1 | 0 | 0 | 1 | 1 | + |
Ü
primo numero
(83 decimale) |
|
1 | 0 | 0 | 1 | 0 | 1 | = |
Ü
secondo numero (37 decimale) |
||
1 | 1 | 1 | 1 | 0 | 0 | 0 |
Ü
risultato
(120 decimale) |
Infatti in base a particolari proprietà dell'algebra binaria, si ha
che:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 Ü col riporto di 1 alla cifra successiva ( quella immediatamente a sinistra
e che ha
Per la sottrazione si segue il metodo inverso a quello visto per la
somma, cioè:
Ú11
Ú11
110101 primo
numero
(53 decimale)
11001 secondo
numero (25 decimale)
_______
11100
risultato
(28 decimale)
in pratica si richiama 1 dalla casella immediatamente a sinistra,
bit che e' più significativo e che vale il doppio (e' come se
richiamassimo due bit contemporaneamente); useremo poi tali bit per calcolare il
risultato. Ovviamente la casella che conteneva il bit richiamato ora "si
sarà svuotata" e dovremo vederla come se contenesse 0. Infatti per le
proprietà dell'algebra binaria abbiamo che:
1 – 1 = 0
0 – 0 = 0
1 – 0 = 1
0 – 1 = 1
col
richiamo di 1 dalla casella precedente (da sinistra verso destra), bit che vale
COMPARAZIONE
FRA NUMERI BINARI
La comparazione (confronto) fra numeri binari è l'operazione che ci
consente di stabilire se i numeri presi in esame sono uguali fra loro oppure uno
e' maggiore o minore dell'altro. Quello che più interessa è poter fare un
confronto senza dover calcolare a priori i valori decimali corrispondenti ai
numeri espressi in forma binaria.
Allo scopo di formulare qualche criterio di comparazione,
consideriamo due numeri binari di quattro cifre (4 bit) ciascuno, ad
esempio: 1110 e 110 1.
La loro somma è : 11011, ossia un numero che contiene una cifra in più
rispetto a quella degli addendi. Poiché ovviamente la somma è maggiore di
ciascun addendo si può dire che tra due numeri binari ha maggior valore quello
che contiene più cifre (attenzione alla posizione della virgola).
I valori decimali corrispondenti a quelli binari
considerati sono: 1110 = 14 e 1101 = 13.
Pertanto (sappiamo che 14 e' maggiore di 13), possiamo
scrivere che 1110 > 1101. Per poter affermare che un numero e' maggiore o
minore di un’altro, si procede nel seguente modo:
Si incolonnano i due numeri da confrontare (in binario) e partendo da
sinistra verso destra, si guarda quale dei due presenta per primo lo zero ed in
tal caso diremo che questo è il numero più piccolo.
1110 Ü primo numero
1101 Ü
secondo numero
Diremo quindi che il secondo numero è il più piccolo perché presenta per primo lo zero (da sinistra verso destra).