In seguito il metodo Modulo e segno venne abbandonato
ed attualmente si utilizza quasi sempre il metodo complemento a 2.
In questo tipo di rappresentazione, il primo bit a sinistra rappresenta il segno del numero e gli altri il suo valore assoluto. In particolare il bit di segno assumerà il valore 0 per i numeri positivi e 1 per quelli negativi.
Riportiamo alcuni esempi nella configurazione a 16 bit:
42 |
|
||||||||||||||||
-42 |
|
||||||||||||||||
100 |
|
||||||||||||||||
-100 |
|
Come evidenziato negli esempi, tra il bit di segno e quello
più significativo del modulo viene inserita a completamento una serie di zero.
Quindi con una configurazione di n bit possono essere rappresentati tutti i valori interi compresi tra
-2n-1 -1 e +2n-1 -1
Si osservi che in questo tipo di rappresentazione esiste uno
"zero positivo" ed uno "zero negativo".
+0 |
|
||||||||||||||||
-0 |
|
Questa incongruenza può creare diversi problemi nei processi
di elaborazione. E' stato quindi ideato un nuovo metodo di codifica, denominato
"complemento a 2", che elimina questa discrepanza.
Esercizi
Eseguire almeno 10 esercizi proposti dal modulo "Modulo e segno" della voce di menù "Codifica dei numeri". Continuare fino a quando si ottengono sempre risposte corrette.
In una sequenza di n bit è possibile creare 2n configurazioni diverse. Nella rappresentazione in complemento, mentre a un valore x positivo viene associata la sua configurazione binaria, al valore -x viene associata la configurazione 2n-x .
Ad esempio, in una configurazione ad 8 bit la rappresentazione del numero +15 è la seguente:
+15 |
|
Ora, se voglio rappresentare il numero -15, dovrò applicare la formula 28-15 che nel sistema binario comporta la seguente operazione:
(28) | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | |
(15) | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | = | ||
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
||
(-15) | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
Quindi il numero binario 11110001 così ottenuto rappresenta il valore -15.
Si osservi però, che il numero 11110001 non è altro che il complemento alla base del numero 00001111 .
Quindi i numeri negativi verranno rappresentati semplicemente con il complemento alla base del loro valore positivo (vedi il paragrafo 1.6).
La rappresentazione in complemento gode delle seguenti proprietà:
Questa rappresentazione è quella più usata in quanto facilita notevolmente le operazioni aritmetiche all'interno della macchina.
Prima di proporre alcuni esempi riportiamo qui di seguito i valori minimi e massimi che possono essere espressi con questo tipo di rappresentazione in funzione del configurazione di bit disponibile:
Configurazione |
Valore minimo |
Valore massimo |
a 8 bit (1 byte) [char] |
-128 |
+127 |
a 16 bit (2 byte) [integer] |
-32.768 |
+32.767 |
a 32 bit (4 byte) [long] |
-2.147.483.648 |
+2.147.483.647 |
Rappresentare in complemento a 2 dei numeri: +53 e -53:
+53 |
|
||||||||||||||||
-53 |
|
Determinare il valore del numero rappresentato con la seguente configurazione di bit in complemento a 2.
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
Poiché il primo bit è 0 il valore è sicuramente positivo ed otterrò:
25 + 22 + 21= 32 + 4 + 2 = 38
Determinare il valore del numero rappresentato con la seguente configurazione di bit in complemento a 2.
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
Poiché il primo bit è 1 il valore è sicuramente negativo. Per calcolare il valore assoluto del numero devo prima calcolare il suo complemento alla base che è:
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
Ottengo quindi:
26 + 24 + 23 + 21 = 64 + 16 + 8 + 2 = -90
Esercizi
Eseguire almeno 10 esercizi proposti dal modulo "Complemento a 2" della voce di menù "Codifica
dei numeri". Continuare fino a
quando si ottengono sempre risposte corrette.
Sappiamo che nella maggior parte dei casi per eseguire determinati calcoli non è possibile utilizzare i numeri interi ma occorre invece adoperare numeri reali, numeri cioè, che possono contenere una parte decimale. Abbiamo visto inoltre che i valori che possono essere espressi da una determinata configurazione di bit sono, tutto sommato, abbastanza limitati. Occorre quindi trovare un altro metodo per rappresentare numeri che contengono una parte decimale o che esprimono grandezze molto grandi. Osserviamo ora i seguenti numeri:
100 |
= +0,1 * 103 |
10 |
= +0,1 * 102 |
1 |
= +0,1 * 101 |
0,1 |
= +0,1 * 100 |
0,01 |
= +0,1 * 10-1 |
-10 |
= -0,1 * 102 |
-0,01 |
= -0,1 * 10-1 |
P greco | |
3,14159265358979 |
= +0,314159265358979 * 101 |
Lunghezza di Planck in mm | |
0,00000000000000000000000000000000001616 |
= +0,1616 * 10-34 |
Distanza in Km tra la Terra e Andromeda (2 milioni di anni luce) | |
18.921.599.999.936.900.000 |
= +0,189215999999369 * 1020 |
Si tratta di numeri che esprimo grandezze molto diverse e che pertanto assumo forme altrettanto diverse; si rende quindi necessario trovare una forma di rappresentazione che sia la più omogenea possibile. Osservando le espressioni esposte nella colonna di sinistra si osserva quanto segue:
Questo modo di rappresentare i numeri reali si dice "notazione esponenziale".
Nella notazione esponenziale possiamo quindi individuare i seguenti elementi:
In teoria è possibile, con questo metodo, rappresentare numeri di qualsiasi grandezza. In pratica però, se lo spazio disponibile è limitato, dobbiamo fare i conti con una serie di limiti. A titolo di esempio, supponiamo di avere a disposizione complessivamente 12 celle dove in ogni cella è possibile inserire una sola cifra o un solo segno (+,-) e dividiamo lo spazio disponibile tra i vari elementi che compongono il numero nel seguente modo:
I numeri esposti precedentemente possono essere rappresentati nel seguente modo:
Notazione esponenziale |
Rappresentazione normalizzata a virgola mobile (floating point) |
||||||||||||
+0,1 * 103 |
|
||||||||||||
+0,1 * 102 |
|
||||||||||||
+0,1 * 101 |
|
||||||||||||
+0,1 * 100 |
|
||||||||||||
+0,1 * 10-1 |
|
||||||||||||
-0,1 * 102 |
|
||||||||||||
-0,1 * 10-1 |
|
||||||||||||
+0,314159265358979 * 101 |
|
||||||||||||
+0,1616 * 10-34 |
|
||||||||||||
+0,189215999999369 * 1020 |
|
E' importante notare che non tutti i numeri sono stati rappresentati nella loro completezza; infatti nella rappresentazione dei numeri (+0,314159265358979 * 101) e (+0,189215999999369 * 1020) siamo stati costretti a tralasciare le ultime 7 cifre significative in quanto non abbiamo, all'interno della mantissa, lo spazio necessario per inserirle. L'ordine di grandezza del numero così espresso è corretto mentre la precisione dello stesso è stata notevolmente limitata.
Osserviamo inoltre che non è possibile rappresentare numeri con un ordine di grandezza superiore a 10+99 e inferiore a 10-99 in quanto non c'è lo spazio sufficiente per rappresentare un esponente di 3 o più cifre. Fortunatamente difficilmente si avrà necessità di utilizzare numeri così grandi e così piccoli.
Possiamo quindi concludere che:
Questo modo di codificare i numeri reali si dice: rappresentazione normalizzata a virgola mobile (floating point). Per semplificare la trattazione abbiamo utilizzato i numeri del sistema decimale. All'interno del calcolatore questa rappresentazione avviene ovviamente con dei numeri binari applicando gli stessi meccanismi.
In pratica, in quasi tutti i linguaggi di programmazione, sono disponibili due tipi di rappresentazione dei numeri reali che si differenziano per il numero di byte utilizzati:
Concludiamo il capitolo relativo alla codifica dei numeri con una tabella riepilogativa che elenca tutte le caratteristiche dei principali tipi di dato numerici utilizzati da quasi tutti i linguaggi di programmazione.
Numeri |
Tipo |
Bit |
Byte |
Cifre significative |
Valore minimo |
Valore massimo |
Interi |
char |
8 |
1 |
-128 |
-127 |
|
Interi |
integer |
16 |
2 |
-32.768 |
+32.767 |
|
Interi |
long |
32 |
4 |
-2.147.483.648 |
-2.147.483.647 |
|
Reali |
float |
32 |
4 |
7 |
±10-38 |
±10+38 |
Reali |
double |
64 |
8 |
16 |
±10-308 |
±10+308 |
Esercizi
Eseguire almeno 10 esercizi proposti dal modulo "Numeri a virgola mobile" della voce di menù "Codifica dei numeri". Continuare fino a quando si ottengono sempre risposte corrette.
Per alfabeto esterno di un calcolatore s'intende l'insieme dei caratteri che la macchina è in grado di leggere o scrivere con le sue apparecchiature d'ingresso (per esempio la tastiera) o d'uscita (per esempio la stampante e il video). L'alfabeto esterno è comprensibile all'uomo ed è composto da svariati caratteri quali:
L'alfabeto interno del computer è, come sappiamo, rappresentato soltanto dall'alfabeto binario (0, 1).
Occorre quindi trovare una convenzione per trasformare i caratteri dell'alfabeto esterno in numeri binari. L'operazione che trasforma i caratteri di un alfabeto esterno in numeri binari si dice "codifica". Così, per esempio, se si schiaccia il tasto "a" sulla propria tastiera, all'interno del calcolatore verrà inviato un messaggio contenente una stringa di 8 bit (per esempio 0110 0001) che rappresenta appunto il carattere "a". Nei moderni calcolatori viene quindi adottato un codice che associa ad ogni carattere una stringa di 8 bit (1 byte). Poiché le configurazioni possibili di 8 bit sono 256 (28) è possibile rappresentare soltanto 256 caratteri diversi. Sono stati creati diversi tipi di codici, ma, attualmente, il codice più diffuso è quello denominato ASCII (American Standard Code for Information Interchange).
I caratteri rappresentati dal codice ASCII si possono classificare in tre categorie:
I caratteri di controllo sono codici che hanno un significato particolare e che non possono essere stampati o visualizzati.
I caratteri standard sono quelli visibili e stampabili e che sono universalmente riconosciuti da tutti i computer.
I caratteri del codice esteso sono quelli sviluppati dalle grandi case costruttrici di computer e si possono incontrare differenze passando dall'una all'altra.
CARATTERI DI CONTROLLO |
||||||||
DEC |
HEX |
Car. |
Descrizione |
DEC |
HEX |
Car. |
Descrizione |
|
0 |
00 |
NUL |
16 |
10 |
DLE |
|||
1 |
01 |
SOH |
Start of heading |
17 |
11 |
DC1 |
Device control 1 |
|
2 |
02 |
STX |
Start of text |
18 |
12 |
DC2 |
Device control 2 |
|
3 |
03 |
ETX |
End of text |
19 |
13 |
DC3 |
Device control 3 |
|
4 |
04 |
EOT |
End of transmission |
20 |
14 |
DC4 |
Device control 4 |
|
5 |
05 |
ENQ |
Enquiry |
21 |
15 |
NAK |
Negative acknowledge |
|
6 |
06 |
ACK |
Acknowledge |
22 |
16 |
SYN |
Synchronous idle |
|
7 |
07 |
BEL |
Bell, alarm |
24 |
17 |
ETB |
End of transmission block |
|
8 |
08 |
BS |
Backspace |
24 |
18 |
CAN |
Cancel |
|
9 |
09 |
HT |
Horizontal tabulation |
25 |
19 |
EM |
End of medium |
|
10 |
0A |
LF |
Line feed |
26 |
1A |
SUB |
Substitute |
|
11 |
0B |
VT |
Vertical tabulation |
27 |
1B |
ESC |
Escape |
|
12 |
0C |
FF |
Form feed |
20 |
1C |
FS |
File separator |
|
13 |
0D |
CR |
Carriage return |
29 |
1D |
GS |
Group separator |
|
14 |
0E |
SO |
Shift out |
30 |
1E |
RS |
Record separator |
|
15 |
0F |
SI |
Shift in |
31 |
1F |
US |
Unit separator |
|
Vale la pena di sottolineare il significato dei caratteri di controllo usati più comunemente:
7 |
BEL |
Emette un beep |
8 |
BS |
Spazio nella posizione precedente. Equivale alla cancellazione del carattere precedente |
9 |
HT |
Tabulazione orizzontale: il cursore avanza di un numero prefissato di posizioni |
10 |
LF |
|
12 |
FF |
Salto pagina |
13 |
CR |
Ritorno a capo: il cursore si posiziona all'inizio della riga |
27 |
ESC |
CARATTERI STANDARD |
||||||||||||
Per vedere i caratteri del codice esteso presenti sul tuo computer esegui la voce "Codici ASCII" della voce di menù "Codici" del programma utilizzato per le esercitazioni.