I numeri per il digitale

Rappresentazione dei numeri.

Passiamo adesso alla codifica di un’altra classe di informazioni di grande rilevanza: i numeri.

Nella codifica ASCII, chiamata anche “CODIFICA DI CARATTERE” (in quanto ad ogni

carattere corrisponde un codice che utilizza un byte), possiamo rappresentare i numeri.

Per esempio 1237 è rappresentato come sequenza di 4 byte:

• un primo byte che contiene la codifica ASCII della cifra 1 (00110001)

• un secondo byte che contiene la codifica ASCII della cifra 2 (00110010)

• un quarto byte che contiene la codifica ASCII della cifra 7 (00110111)

Questa forma di rappresentazione di un numero è idonea per la rappresentazione su video o

per un testo ma non è adatta per effettuare dei calcoli.

Possiamo, quindi, sinteticamente affermare che all’interno del nostro elaboratore abbiamo:

• codifica per i testi -> ASCII

• codifica per i numeri

Dobbiamo innanzi tutto capire quale è la differenza fra la rappresentazione di un numero ed il

suo valore vero. Per esempio, quando pensiamo al numero intero 4 come concetto astratto,

possiamo rappresentare in modi diversi: con le dita di una mano, secondo la nostra codifica di

sistema decimale, in numeri romani.

Esistono quindi almeno tre rappresentazioni per la stessa entità.

In particolare delle tre rappresentazioni c’è n’è una che ha una certa rilevanza ed è quella

usata comunemente da noi umani: il sistema di rappresentazione decimale posizionale.

Sistema Posizionale

Un sistema posizionale è caratterizzato da una base o radice che indicheremo con la lettera r e

da un insieme di cifre di che vanno da 0 a (r-1).

Il sistema decimale ha una base r = 10 che utilizza 10 cifre: 0, 1, 2, …, 9.

Se avessimo r = 3 avremmo le seguenti cifre: 0, 1, 2.

Prima di vedere cosa succede all’interno di un elaboratore, vediamo come è possibile passare,

in un sistema posizionale, dalla rappresentazione di un numero al suo valore o viceversa.

In un sistema di rappresentazione posizionale il generico numero n è rappresentato da una

sequenza di cifre:

N = dm dm-1… d1 d0

ove ciascuna di queste cifre appartiene all’insieme proprio del sistema di numerazione.

Per esempio se fosse N = 1732 il suo valore si otterrebbe tenendo presente che abbiamo 2

unità, 3 decine, 7 centinaia, 1 migliaio e dunque:

N = 1 migliaio + 7 centinaia + 3 decine + 2 unità

Ciò significa che all’entità 2 associamo un peso di 100, all’entità 3 il peso 101, all’entità 7 il

peso 102, e all’entità 1 il peso 103.

Da questa semplice considerazione possiamo ricavare quella che è una regola dei sistemi

di rappresentazione posizionale (posizionale perché ad ogni cifra è associato un ben

determinato peso che dipende dalla posizione della cifra all’interno del numero).

Da quanto detto è possibile dedurre alcune regole:

Assegnato un numero intero non negativo N, questo è rappresentato come sequenza

di n simboli (cifre):

N = dm dm-1… d1 d0

Il valore del numero è:

Nvalore = dn-1 r

n-1 + dn-2 r

n-2 + ….. + d1 r

1 + d0 r

0

essendo: r la base del sistema di numerazione, d le cifre appartenenti all’insieme 0, 1, …, r-1.

Il sistema binario è un sistema avente come base r = 2 e cifre 0 e 1.

Per convertire un numero dal sistema binario al sistema decimale applichiamo la formula del

valore vero.

Ad esempio, dato il numero 1010 in base 2 si vuole trovare il suo valore in base 10:

10102 = 1* 23 + 0* 22 + 1*21 +0* 20= 8 +2 = 1010

Il sistema esadecimale ha una base r = 16 avente come cifre i seguenti simboli: 0, 1, 2, …, 9,

A, B, C, D, E, F

con valori 0, 1, …, 9, 10, 11, 12, 13, 14, 15 rispettivamente.

Ad esempio: 10F216 = 1 * 163 + 0 * 162 + F * 161 + 2* 160

= 1 * 4096 + 15 * 161 + 2*1

= 1*4096 + 15*16 + 2*1 = 4096 + 240 + 2 = 4338(10)

Conversione dalla base 2 alla base 10

Dato un numero nel sistema decimale, vogliamo vedere come questo viene rappresentato

all’interno dell’elaboratore in termini di 0 ed 1, ossia vogliamo effettuare la conversione da

sistema decimale a sistema binario.

In realtà consente di passare dalla rappresentazione in base 10 ad una rappresentazione in

una base r qualunque N10 -> Nr

Come sappiamo il valore di un numero è esprimibile mediante la relazione:

N10 = dn-1 r

n-1 + dn-2 r

n-2 + ….. + d1 r

1 + d0 r

0

mettiamo a fattore comune r (la base) fra le prime n-1 entità:

N10 = r ( dn-1 r

n-2 + dn-2 r

n-3 + … + d1 ) + d0

ponendo la quantità entro le parentesi tonde ( dn-1 r

n-2 + dn-2 r

n-3 + … + d1 ) = Q0, possiamo

scrivere:

N10 = r Q0+ d0

Tale espressione fa immediatamente pensare alla definizione euclidea di divisione, infatti:

N10 è il dividendo r è il divisore Q0 il quoziente d0 il resto.

Sappiamo che il dividendo è uguale al divisore per il quoziente più il resto, ossia:

D = d Q + R

Ne consegue che effettuando la divisione intera fra N10 e il valore decimale della base r cui si

vuole passare (ad esempio 210) otterremo che il resto d0 è la cifra meno significativa nella

rappresentazione in base r.

Si noti che tale cifra è sicuramente compresa nell’insieme 1, 2, …, r – 1 in quanto il resto di

una divisione intera è sicuramente inferiore al divisore r.

Se consideriamo adesso:

Q0 = dn-1 r

n-2 + dn-2 r

n-3 + ….. + d1 = r (dn-1 r

n-3 + dn-2 r

n-4 + … +d2) + d1 = r Q1+ d1

possiamo ancora una volta paragonare Q0 = r Q1+ d1 con la definizione euclidea, avendo

individuato la cifra di posto 1 (d1) nella nuova rappresentazione.

Iterando il procedimento ci fermeremo quando Qi = 0.

Questa forma di rappresentazione di un numero è idonea per la rappresentazione su video o

per un testo ma non è adatta per effettuare dei calcoli.

Possiamo, quindi, sinteticamente affermare che all’interno del nostro elaboratore abbiamo:

• codifica per i testi -> ASCII

• codifica per i numeri

Dobbiamo innanzi tutto capire quale è la differenza fra la rappresentazione di un numero ed il

suo valore vero. Per esempio, quando pensiamo al numero intero 4 come concetto astratto,

possiamo rappresentare in modi diversi: con le dita di una mano, secondo la nostra codifica di

sistema decimale, in numeri romani.

Esistono quindi almeno tre rappresentazioni per la stessa entità.

In particolare delle tre rappresentazioni c’è n’è una che ha una certa rilevanza ed è quella

usata comunemente da noi umani: il sistema di rappresentazione decimale posizionale.

Sistema Posizionale

Un sistema posizionale è caratterizzato da una base o radice che indicheremo con la lettera r e

da un insieme di cifre di che vanno da 0 a (r-1).

Il sistema decimale ha una base r = 10 che utilizza 10 cifre: 0, 1, 2, …, 9.

Se avessimo r = 3 avremmo le seguenti cifre: 0, 1, 2.

Prima di vedere cosa succede all’interno di un elaboratore, vediamo come è possibile passare,

in un sistema posizionale, dalla rappresentazione di un numero al suo valore o viceversa.

In un sistema di rappresentazione posizionale il generico numero n è rappresentato da una

sequenza di cifre:

N = dm dm-1… d1 d0

ove ciascuna di queste cifre appartiene all’insieme proprio del sistema di numerazione.

Per esempio se fosse N = 1732 il suo valore si otterrebbe tenendo presente che abbiamo 2

unità, 3 decine, 7 centinaia, 1 migliaio e dunque:

N = 1 migliaio + 7 centinaia + 3 decine + 2 unità

Ciò significa che all’entità 2 associamo un peso di 100, all’entità 3 il peso 101, all’entità 7 il

peso 102, e all’entità 1 il peso 103.

Da questa semplice considerazione possiamo ricavare quella che è una regola dei sistemi

di rappresentazione posizionale (posizionale perché ad ogni cifra è associato un ben

determinato peso che dipende dalla posizione della cifra all’interno del numero).

Da quanto detto è possibile dedurre alcune regole:

Assegnato un numero intero non negativo N, questo è rappresentato come sequenza

di n simboli (cifre):

N = dm dm-1… d1 d0

Il valore del numero è:

Nvalore = dn-1 r

n-1 + dn-2 r

n-2 + ….. + d1 r

1 + d0 r

0

essendo: r la base del sistema di numerazione, d le cifre appartenenti all’insieme 0, 1, …, r-1.

Il sistema binario è un sistema avente come base r = 2 e cifre 0 e 1.

Per convertire un numero dal sistema binario al sistema decimale applichiamo la formula del

valore vero.

Ad esempio, dato il numero 1010 in base 2 si vuole trovare il suo valore in base 10:

10102 = 1* 23 + 0* 22 + 1*21 +0* 20= 8 +2 = 1010

Il sistema esadecimale ha una base r = 16 avente come cifre i seguenti simboli: 0, 1, 2, …, 9,

A, B, C, D, E, F

con valori 0, 1, …, 9, 10, 11, 12, 13, 14, 15 rispettivamente.

Ad esempio: 10F216 = 1 * 163 + 0 * 162 + F * 161 + 2* 160

= 1 * 4096 + 15 * 161 + 2*1

= 1*4096 + 15*16 + 2*1 = 4096 + 240 + 2 = 4338(10)

Conversione dalla base 2 alla base 10

Dato un numero nel sistema decimale, vogliamo vedere come questo viene rappresentato

all’interno dell’elaboratore in termini di 0 ed 1, ossia vogliamo effettuare la conversione da

sistema decimale a sistema binario.

In realtà consente di passare dalla rappresentazione in base 10 ad una rappresentazione in

una base r qualunque N10 -> Nr

Come sappiamo il valore di un numero è esprimibile mediante la relazione:

N10 = dn-1 r

n-1 + dn-2 r

n-2 + ….. + d1 r

1 + d0 r

0

mettiamo a fattore comune r (la base) fra le prime n-1 entità:

N10 = r ( dn-1 r

n-2 + dn-2 r

n-3 + … + d1 ) + d0

ponendo la quantità entro le parentesi tonde ( dn-1 r

n-2 + dn-2 r

n-3 + … + d1 ) = Q0, possiamo scrivere:

N10 = r Q0+ d0

Operazioni aritmetiche tra numeri binari:
Il calcolatore ha al suo interno dei dispositivi adatti ad effettuare le operazioni elementari sui
numeri
binari: moltiplicazione, somma, divisione e sottrazione.
Dato che il sistema di numerazione binario è posizionale, è evidente che le leggi che regolano
tali operazioni sono identiche a quelle dell’aritmetica dei numeri decimali, tenendo conto della
base del sistema di rappresentazione e del numero di bit che si vuole utilizzare.
Supponiamo d’avere due numeri binari
A = A n-1…A i+1 Ai A i-1…A1A0
B = B n-1…B i+1 Bi Bi-1…B1B0
che utilizzano n bit (se uno dei due ha m < n bit basta aggiungere n – m zeri davanti).

Shift.
Si vuole introdurre una nuova operazione detta di scorrimento o meglio di shift che non trova
un diretto riscontro sulle operazioni che facciamo sul sistema decimale.
Per tale operazione è fondamentale stabilire il numero di bit che si utilizzano.
L’operazione di scorrimento può essere effettuata sia a sinistra sia a destra.

Shift a sinistra.
Se ho scorrimento a sinistra il bit di posto i va ad occupare la posizione i + 1, il bit più
significativo viene eliminato e il bit meno significativo assume valore zero.
Supponiamo di avere il numero 001011 di 6 bit e di effettuare shift a sinistra.

Rappresentazione dei numeri relativi:
Fino ad ora abbiamo trattato numeri interi positivi, ma per le esigenze di calcolo è importante
saper rappresentare numeri relativi.
Esistono almeno 3 modi per rappresentare i numeri relativi:
• 1. rappresentazione in modulo e segno
• 2. rappresentazione in complemento alla base (normalmente chiamata complemento a
2)
• 3. rappresentazione in complemento alla base diminuita (chiamata complemento a 1)
Di fatto tutti gli elaboratori (con pochissime eccezioni) utilizzano, per la rappresentazione dei
numeri relativi, la rappresentazione in complemento a due.

Modulo e segno
È la più facile da intuire ed è quella che ha una corrispondenza diretta con la nostra
usuale rappresentazione dei numeri.
Noi anteponiamo al valore assoluto di un numero un simbolo che denota se esso è positivo o
negativo.
Utilizziamo 2 entità: il modulo ed il segno.
Ad esempio +3 e -3 hanno stesso modulo (3) ma segno differente.
Tenendo presente che il segno deve essere rappresentato in binario possiamo facilmente
intuire come ottenere un numero binario relativo. Stabilito il numero di bit, il bit più
significativo ha valore di segno:
• 1. se 0 il segno è +
• 2. se 1 il segno è –
È evidente che se utilizziamo n bit, uno verrà sacrificato per rappresentare il segno. Si noti che
anche in questo caso è fondamentale stabilire il numero di bit che si utilizzano.
Complemento alla base (Complemento a 2)
Stabilito il numero di bit, supponiamo n, il bit più significativo ha peso: -(2n-1
)

Sulla base di questa considerazione possiamo riscrivere quella formula che, data la sequenza di
bit, mi esprimeva il valore vero del numero:
Nvalore = – dn-1 (2n-1
) + dn-2 2
n-2 + …+ d0 2
0

Data una sequenza di bit che rappresenta un numero relativo in complemento a due posso
ricavare il valore vero del numero sulla base della relazione appena esposta.
Esempio:
Nvalore = 0101(C2) N = -0 *(23

) + 1 * 22 + 0 * 21 + 1 * 20 = 4 + 1 = 5

Nvalore = 1011(C2) N = -1* (23

) + 0 * 22 + 1 * 21 + 1 * 20 = -8 + 2 + 1= -5

Complemento alla base diminuita (Complemento a 1)
Stabilito il numero di bit, supponiamo n, il bit più significativo ha peso: -(2n-1
-1)

Sulla base di questa considerazione possiamo riscrivere quella formula che, data la sequenza di
bit, mi esprimeva il valore vero del numero:
Nvalore = – dn-1 (2n-1

-1) + dn-2 2

n-2 + …+ d0 2
0

Data una sequenza di bit che rappresenta un numero relativo in complemento a 1 posso
ricavare il valore vero del numero sulla base della relazione appena esposta.
Esempio:

Nvalore = 0101(C1) N = -0 *(23

-1) + 1 * 22 + 0 * 21 + 1 * 20 = 4 + 1 = 5

Nvalore = 1011(C1) N = -1* (23

-1) + 0 * 22 + 1 * 21 + 1 * 20 = -7 + 2 + 1= -4

Nella rappresentazione in complemento il primo bit mi dice se il numero è positivo o negativo,
in particolare se il primo bit è 0 il numero è positivo, se il primo bit è 1 il numero è non
positivo (ossia negativo o nullo).

Calcolo dell’opposto
Introduciamo un’operazione unaria detta complementazione o negazione. Essendo il sistema
binario a due cifre (0 e 1) negare un bit vuol dire scambiare 0 con 1 o viceversa. La
complementazione si può applicare a tutti i bit che compongono il numero.
Vediamo com’è possibile calcolare l’opposto di un numero nelle tre rappresentazioni appena
viste.
• Modulo e segno -> Basta complementare il bit di segno.
• Complemento alla base -> si complementano tutti i bit -> al numero ottenuto si
somma 1
• Complemento alla base diminuita -> si complementano tutti i bit.


Dalla stessa categoria

Lascia un commento