Fondamenti di informatica - Laurea triennale Informatica/Sistema binario, operazioni di base, materiale propedeutico
Informazione, trasmissione e comunicazione
[modifica | modifica sorgente]L'informazione è l'oggetto di una trasmissione ed è costituito da un messaggio che è in grado di cambiare il grado di incertezza di chi lo riceve rispetto a determinati aspetti della realtà.
Se noi, ad esempio, assistiamo ad un documentario trasmesso in televisione, acquisiamo tutta una serie di elementi che aumentano il nostro livello di conoscenza in merito all'oggetto del documentario. La stessa cosa avviene leggendo un libro o guardando una fotografia.
E' importante notare che poiché i destinatari dei messaggi di comunicazione sono esseri umani, questi vengono codificati in forma che possano da questi essere interpretati, per cui le informazioni saranno codificate sotto forma di testi, immagini, suoni.
Inoltre, la trasmissione di informazioni richiede la presenza di almeno due interlocutori, uno che la trasmette e l'altro che la riceve, se poi questa trasmissione è anche bidirezionale, ossia entrambi gli interlocutori sono in grado di trasmettere e di ricevere allora vi è anche comunicazione.
La trasmissione televisiva del documentario, di cui avevamo già accennato, è difatti una trasmissione perché è unidirezionale, avviene in una sola direzione fra l'emittente televisiva e i telespettatori. La telefonata fra due persone è invece una comunicazione perché avviene in due direzioni, con scambio di informazioni fra gli interlocutori.
L'informazione per essere trasmessa o comunicata spesso richiede di essere elaborata, ossia trasformata in una forma che possa essere utilizzata da un essere umano a da una macchina, questo compito viene generalmente svolto dal computer che prende anche il nome di elaboratore elettronico, questo è una macchina costituita da dispositivi elettronici e meccanici, hardware le cui funzioni sono regolate da programmi, software.
Nell'elaborare l'informazione il computer compie delle operazioni che possono essere di:
- manipolazione matematica, quando per esempio effettua dei calcoli su valori numerici;
- organizzazione, quando per esempio mette in colonna una serie di nomi e/o numeri;
- conversione, quando per esempio trasforma dei dati di tipo numerico in grafici.
Il computer comunque non si occupa solo di elaborare le informazioni codificando, manipolando e convertendo opportunamente i dati, ma anche di trasmissione e di comunicazione. Anzi, oggi, grazie alla diffusione delle reti informatiche, internet soprattutto, esso è il più potenze mezzo di trasmissione e di comunicazione esistente.
Per fare questo necessiterà di opportune codifiche dei dati e di protocolli di comunicazione. Questi ultimi sono delle regole condivise da entrambi gli attori della trasmissione che hanno lo scopo di far sì che la comunicazione non sia incerta.
Per meglio comprendere il concetto di protocollo di comunicazione nella vita di tutti i giorni prendiamo come esempio una comunicazione telefonica.
Chi riceve la telefonata alza la cornetta e generalmente risponde - pronto -, il chiamante si presenta, ci si saluta e dopo inizia la trasmissione di informazioni fra gli interlocutori, al termine ci si risaluta e si chiude la comunicazione.
Vedremo in seguito come i computer richiedano anche essi per poter comunicare dei protocolli sebbene meno informali e molto più rigorosi di quelli utilizzati nella vita di tutti i giorni dagli esseri umani.
Il dato
[modifica | modifica sorgente]Un dato è un messaggio elementare definito da una sequenza di simboli appartenenti ad un insieme limitato denominato alfabeto o codice. Il tipo di informazione che si deve rappresentare e il sistema di codifica denotano l'ampiezza dell'alfabeto.
| Dato | Alfabeto | |
| Testo | a -...- z - A -...- Z - 0 -...- 9 | |
| Numero | 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 | |
| Punteggiatura | . - , - ; - : - ? - ! |
Forma analogica e forma digitale
[modifica | modifica sorgente]I dati possono essere rappresentati in forma analogica o in forma digitale. La forma analogica la si ha quando il passaggio fra un dato e l'altro può avvenire in forma continua, come ad esempio lo spostarsi delle lancette di un orologio per l'appunto a lancette.
La forma digitale la si ha invece quando la variazione avviene per valori discreti, come ad esempio accade per le cifre di un orologio digitale.
In pratica mentre in un orologio a lancette, analogico, potremmo in teoria misurare anche le infinitesime frazioni di secondo, disponendo di una scala sufficientemente ingrandita, in un orologio digitale invece il passare da un secondo all'altro avviene per scatti, ossia in forma discontinua (discreta).
Il sistema binario
[modifica | modifica sorgente]In un computer i dati e conseguentemente le informazioni sono memorizzate e poi elaborate in forma digitale ed esattamente in forma binaria, ossia mediante l'impiego di soli due simboli, 0 e 1. Non ci si lasci ingannare dal fatto che l'alfabeto del computer sia costituito da soli due simboli, con questi si può rappresentare e codificare qualsiasi informazione.
Nello stesso modo in cui noi esseri umani riusciamo a rappresentare qualsiasi numero utilizzando solo dieci simboli (0,1,2,..,9), semplicemente utilizzando delle sequenze, allo stesso modo possiamo rappresentare qualsiasi tipo di dato facendo semplicemente corrispondere allo stesso una specifica sequenza di simboli.
Il sistema binario è un sistema numerico posizionale in base 2, ossia utilizza solo due simboli, tipicamente 0 e 1. La sua struttura come per tutti i sistemi posizionali è identica a quella del sistema decimale che come ben si sa usa dieci simboli. Nel sistema binario lo 0 corrisponde allo 0 del sistema decimale, l'1 all'1 e al 2 corrisponde invece 10 (si legge "uno zero" e non dieci), ossia non potendo rappresentare il 2 non avendo un simbolo da associargli si "ricomincia" la numerazione partendo da 0 e si riporta un'unità a sinistra.
La stessa cosa accade nel sistema decimale, per cui giunti al 9, non avendo un ulteriore simbolo per rappresentare il 10 si "ricomincia" a contare partendo da 0 e riportando a sinistra un'unità.
Una tabella di conversione binario decimale renderà più chiaro il concetto.
| Binario | Decimale | |
| 0 | 0 | |
| 1 | 1 | |
| 10 | 2 | |
| 11 | 3 | |
| 100 | 4 | |
| 101 | 5 | |
| 110 | 6 | |
| 111 | 7 | |
| 1000 | 8 | |
| 1001 | 9 | |
| 1010 | 10 | |
| 1011 | 11 | |
| 1100 | 12 | |
| 1101 | 13 | |
| 1110 | 14 | |
| 1111 | 15 |
Le operazioni aritmetiche nel sistema binario si fanno nello stesso identico modo con cui si fanno nel sistema decimale.
101+ 1001= ----- 1110
Che nel sistema decimale equivale a:
5+ 9= -- 14
E' poi possibile convertire i numeri da un sistema all'altro usando degli algoritmi (procedimenti) di facile impiego. Per passare dal sistema binario a quello decimale si moltiplicano le cifre binarie per le potenze di 2 crescenti partendo da destra come nell'esempio che segue: Per passare invece dal sistema decimale a quello binario si divide il numero da convertire ripetutamente per due riportando un 1 se vi è resto nella divisione e uno 0 se invece non vi è resto, come nell'esempio che segue in cui si converte il numero decimale 10 in binario:
10 : 2 = 5 (resto 0) 5 : 2 = 2 (resto 1) 2 : 2 = 1 (resto 0) 1 : 2 = 0 (resto 1)
Il numero binario risultante è 1010.
Sistema numerico decimale
[modifica | modifica sorgente]Senza dubbio quello più diffuso è il sistema numerico decimale, un sistema posizionale che utilizza dieci simboli numerici. Per esempio, il numero decimale 234 si può rappresentare anche in questo modo: 200+30+4. Oppure in questo modo: 2*102+3*101+4*100.È moltiplicato per una potenza di dieci proprio per il fatto che dieci è la base. Oppure, per quanto riguarda i numeri con una parte frazionaria (quelli con la virgola) si procede in questo modo, il numero 234,483 può essere rappresentato in questo modo: 2*102+3*101+4*100+4*10-1+8*10-2+3*10-3
Sistema numerico binario
[modifica | modifica sorgente]Ovviamente il sistema decimale non è l'unico modo per rappresentare i numeri. Un sistema molto usato, soprattutto nei computer, è il sistema binario, o a base 2. È molto semplice: utilizza solamente 2 cifre, lo 0 e l'1. Queste due cifre sono chiamate bit. L'algebra di Boole(che tratteremo più avanti) si basa su questo sistema, per la proprieta di avere soltanto due valori, che possono significare "falso"(0) o "vero"(1), oppure "spento"(0) o "acceso"(1), o ancora, utilizzato negli apparecchi elettronici, "passa corrente"(1) o "non passa corrente"(0).
Avendo soltanto due valori, il numero di cifre necessario a rappresentare un numero è evidentemente maggiore rispetto al sistema decimale.
Il numero di valori rappresentabili con n bit è : . Ad esempio:
Per n=2 avremo:
00 = 0
01 = 1
10 = 2
11 = 3
Per convertire un numero decimale in uno binario esistono diversi metodi. Il più semplice è quello della divisione per 2 nell'insieme dei numeri interi, invertendo poi le cifre del risultato.
Dunque, prendiamo ad esame il numero 137. Iniziamo dividendolo per 2, otteniamo 68 con il resto di 1. Scriviamo 1 (il resto) nella prima cifra del numero da invertire e proseguiamo dividendo il risultato ed affiancando (a destra) ogni volta il resto, sia esso uguale a 1 o a 0, al numero da invertire, fintanto che non otterremo come risultato 1, quindi 1:2 = 0. Infine invertiamo l'ordine delle cifre del nostro "numero da invertire"
In breve e più chiaramente:
Dato il numero decimale 137 lo dividiamo per il numero 2, nell'insieme dei numeri interi, tenendo conto del suo resto (sempre uguale a 0 o ad 1), finché non raggiungiamo 1:2 = 0. Poi affianchiamo i resti e quindi ne invertiamo l'ordine.
- 137:2 = 68 con resto 1
- 68:2 = 34 con resto 0
- 34:2 = 17 con resto 0
- 17:2 = 8 con resto 1
- 8:2 = 4 con resto 0
- 4:2 = 2 con resto 0
- 2:2 = 1 con resto 0
- 1:2 = 0 con resto 1
- resti affiancati: 10010001
- resti affiancati invertiti (risultato in binario) : 10001001 = 137
Conversione dal sistema binario al sistema decimale
[modifica | modifica sorgente]Per convertire un numero binario in decimale, segui questi passaggi:
1. **Inizia dalla cifra più a destra** del numero binario. 2. **Moltiplica questa cifra per 2 elevato alla potenza di 0** (cioè 2^0 = 1) e ottieni il risultato parziale. 3. Procedi verso sinistra e **moltiplica ogni cifra successiva per la potenza di 2 corrispondente alla sua posizione**.
Ecco un esempio:
Consideriamo il numero binario **111001**: - La cifra più a destra è **1**. Moltiplicata per 2^0, otteniamo **1**. - La seconda cifra da destra è **0**. Moltiplicata per 2^1, otteniamo **0**. - La terza cifra da destra è **0**. Moltiplicata per 2^2, otteniamo **0**. - La quarta cifra da destra è **1**. Moltiplicata per 2^3, otteniamo **8**. - La quinta cifra da destra è **1**. Moltiplicata per 2^4, otteniamo **16**. - La cifra più a sinistra è **1**. Moltiplicata per 2^5, otteniamo **32**.
Sommando tutti questi risultati parziali, otteniamo il valore decimale di **111001**, che è **57**¹.
Sistema ottale ed esadecimale
[modifica | modifica sorgente]Altri sistemi numerici altrettanto importanti sono il sistema ottale che utilizza tutte le cifre fino al numero 8; o il sistema esadecimale, che utilizza le 10 cifre ed altri sei simboli, ossia le lettere che vanno dalla A alla F. Sono state scelte proprio queste basi come rappresentazione numerica proprio per sfruttare il fatto che 8 e 16 sono potenze di 2.
| Valore decimale | Valore esadecimale | Valore ottale | Valore binario |
| 0 | 0 | 0 | 0000 |
| 1 | 1 | 1 | 0001 |
| 2 | 2 | 2 | 0010 |
| 3 | 3 | 3 | 0011 |
| 4 | 4 | 4 | 0100 |
| 5 | 5 | 5 | 0101 |
| 6 | 6 | 6 | 0110 |
| 7 | 7 | 7 | 0111 |
| 8 | 8 | 10 | 1000 |
| 9 | 9 | 11 | 1001 |
| 10 | A | 12 | 1010 |
| 11 | B | 13 | 1011 |
| 12 | C | 14 | 1100 |
| 13 | D | 15 | 1101 |
| 14 | E | 16 | 1110 |
| 15 | F | 17 | 1111 |
Conversione tra binario, ottale ed esadecimale
[modifica | modifica sorgente]Per convertire da binario ad ottale, si raggruppano le cifre a gruppi di 3 (perché 8 = 23), quindi si convertono i singoli gruppi in ottale. Esempio:
| binario | binario raggruppato | ottale raggruppato | ottale |
|---|---|---|---|
| 10000000101 | 10|000|000|101 | 2|0|0|5 | 2005 |
Per convertire da binario ad esadecimale, si procede in modo analogo, raggruppando le cifre per 4 (perché 16 = 24):
| binario | binario raggruppato | esad. raggruppato | esadecimale |
|---|---|---|---|
| 10000000101 | 100|0000|0101 | 4|0|5 | 405 |
Per convertire da ottale/esadecimale in binario, si procede al contrario, espandendo ciascuna cifra. Per esempio:
| ottale | ottale raggruppato | binario raggruppato | binario |
|---|---|---|---|
| 7421246 | 7|4|2|1|2|4|6 | 111|100|010|001|010|100|110 | 111100010001010100110 |
| esadecimale | esad. raggruppato | binario raggruppato | binario |
|---|---|---|---|
| 1E22A6 | 1|E|2|2|A|6 | 0001|1110|0010|0010|1010|0110 | 000111100010001010100110 |
Per convertire da ottale ad esadecimale e viceversa, si passa per una conversione intermedia in binario. Per esempio:
| ottale | ottale raggruppato | binario raggruppato per 3 | binario |
|---|---|---|---|
| 7421246 | 7|4|2|1|2|4|6 | 111|100|010|001|010|100|110 | 111100010001010100110 |
| binario | binario raggruppato per 4 | esad. raggruppato | esadecimale |
|---|---|---|---|
| 000111100010001010100110 | 0001|1110|0010|0010|1010|0110 | 1|E|2|2|A|6 | 1E22A6 |




Operazioni booleane (logica)
[modifica | modifica sorgente]Per capire come i bit vengono manipolati, si associa spesso:
- 0 → falso
- 1 → vero
Le principali operazioni booleane introdotte sono:
- AND: vale 1 solo se entrambi gli ingressi sono 1.
- OR: vale 1 se almeno uno degli ingressi è 1.
- XOR (exclusive OR): vale 1 se gli ingressi sono diversi (uno 1 e l’altro 0), cioè “o P o Q ma non entrambi”.
- NOT: ha un solo ingresso e lo inverte (0→1, 1→0).
Queste operazioni sono analoghe alle operazioni aritmetiche (combinano input per produrre un output), ma lavorano su valori vero/falso invece che su numeri.
Porte logiche e flip-flop
[modifica | modifica sorgente]- Una porta logica (logic gate) è un dispositivo hardware che realizza una funzione booleana (AND, OR, XOR, NOT).
- Nella pratica moderna le porte sono costruite con transistor e rappresentano 0 e 1 come livelli di tensione.
- Le porte sono i “mattoni” dell’hardware e per questo la logica booleana è fondamentale anche nei linguaggi di programmazione.
Flip-flop: memoria elementare
[modifica | modifica sorgente]Un flip-flop è un circuito che:
- ha un’uscita che vale 0 o 1
- mantiene quel valore nel tempo (non cambia “da sola”)
- cambia valore solo quando riceve un impulso (un 1 temporaneo) su uno degli ingressi.
In pratica è una “cella” che ricorda 1 bit.
L’idea chiave: la retroazione (feedback)
[modifica | modifica sorgente]Il trucco che crea la memoria è la retroazione: una parte dell’uscita viene riportata all’ingresso tramite altre porte.
Questo fa sì che:
- quando il circuito “raggiunge” uno stato stabile (uscita 0 o uscita 1),
- quello stato si auto-sostiene anche se l’impulso di comando sparisce.
Interpretazione intuitiva degli ingressi
[modifica | modifica sorgente]Nella figura sopra riportata, i due ingressi agiscono come comandi:
- ingresso alto = comando per impostare l’uscita a 1 (SET)
- ingresso basso = comando per impostare l’uscita a 0 (RESET)
Funzionamento:
- se entrambi gli ingressi restano a 0, l’uscita non cambia
- un 1 temporaneo sopra forza l’uscita a 1
- un 1 temporaneo sotto forza l’uscita a 0
Cosa succede quando setti” l’uscita a 1 (sequenza logica)
[modifica | modifica sorgente]Stato iniziale
[modifica | modifica sorgente]- ingressi: alto = 0, basso = 0
- l’uscita può essere 0 oppure 1: non lo sai, ma è stabile.
Passo A — dai un impulso di SET (alto = 1 per un attimo, basso resta 0)
[modifica | modifica sorgente]- Mettere 1 sull’ingresso alto fa sì che la porta OR (nel circuito mostrato) produca 1 a prescindere dall’altro suo ingresso.
- Motivo: OR è 1 se almeno un ingresso è 1.
- Quell’1 va a un AND: a questo punto l’AND vede due 1 (per come è costruito il circuito, l’altro ingresso dell’AND risulta 1 quando il RESET è 0 tramite un NOT).
- Quindi anche l’AND produce 1 e questo l'uscita a 1.
Passo B — il feedback “blocca” lo stato
[modifica | modifica sorgente]- Ora che OUT=1, questo 1 rientra come secondo ingresso della OR (feedback).
- Quindi la OR rimane a 1 anche se l’ingresso alto torna a 0.
Passo C — togli l’impulso (SET torna a 0)
[modifica | modifica sorgente]- Anche con ingressi tornati (alto = 0, basso = 0), la OR continua a vedere 1 dal feedback → resta 1 → mantiene la catena → Q resta 1.
Conclusione: un impulso breve di SET porta Q a 1 e poi il circuito “si auto-mantiene” in quello stato.
Cosa succede quando “resetti” l’uscita a 0
[modifica | modifica sorgente]- dai un impulso breve sul RESET (ingresso basso = 1), tenendo l’alto a 0.
- attraverso il NOT e la struttura delle porte, questo impulso spezza la condizione che mantiene OUT=1 (se era 1) e forza la catena a portare OUT a 0.
- quando l’impulso torna 0, il feedback ora sostiene lo stato out=0.
In altre parole: SET crea l’aggancio a 1, RESET crea l’aggancio a 0.
Perché “non cambia” quando entrambi gli ingressi sono 0
[modifica | modifica sorgente]Questa è la proprietà cruciale:
- con ingressi a 0, non c’è nessuna “spinta esterna” a cambiare lo stato,
- e il feedback fa sì che l’uscita corrente continui a essere coerente con gli ingressi interni.
Astrazione nell’hardware
[modifica | modifica sorgente]- Esistono diversi modi di costruire un flip-flop con circuiti interni differenti ma stesso comportamento esterno: è un esempio di astrazione.
- L’hardware è organizzato in livelli: transistor → porte → chip → memorie → componenti più complessi, ecc.
- Con tecniche come la VLSI (integrazione su larga scala) si possono costruire chip con milioni di componenti, inclusi moltissimi flip-flop, fino ad arrivare in certi casi a un intero sistema su un chip.