×

dall’abaco in poi…

b2

dall’abaco in poi…

DALL’ABACO IN POI…

{gspeech style=2}

Non è degno di uomini d’ingegno perdere ore come schiavi nel lavoro di calcolo che potrebbe essere affidato tranquillamente a chiunque altro se si usassero le macchine

Wilhelm Leibniz

Contare è una delle azioni più usuali della vita quotidiana, ed è una delle prime abilità che si imparano a scuola. L’istruzione elementare, si diceva una volta, doveva insegnare “a leggere, scrivere e far di conto”. E “il far di conto” è una operazione talmente meccanica che nessuno di noi, nell’effettuarla, si sofferma a ragionare sulle implicazioni concettuali di una così semplice azione, così come chiunque può fare una telefonata senza pensare all’elettronica utilizzata per rendere possibile un gesto così quotidiano.

Il punto di partenza è che per contare (o “numerare”) bisogna fare riferimento ad un sistema di numerazione, che possiamo definire come un modo di esprimere e rappresentare i numeri attraverso un insieme di simboli.

Quante dita hanno i marziani?

Numerare grandi quantità di oggetti o di persone è materialmente impossibile senza introdurre, come abbiamo detto prima, un sistema di numerazione basato anche su simboli scritti. Uno dei sistemi di numerazione più antichi fra quelli conosciuti è quello latino. Si trattava di un sistema basato su pochi simboli, esprimenti unità e raggruppamenti. I numeri si scrivevano semplicemente scrivendo uno dopo l’altro i vari simboli, che riportiamo di seguito:

 

I =1 L =50 M=1000

X=10 C=100

V=5 D=500

 

Le regole erano assai semplici:

 

  • non si potevano scrivere più di tre simboli uguali consecutivi: I = 1, II = 2, III = 3, XXX = 30;
  • un simbolo di valore inferiore si considerava sottratto a quello superiore se scritto a sinistra, sommato se scritto a destra: IV = 4 = (5 – 1), XI = 11 = (10 + 1).

 

Pertanto, per esempio, 1994 in latino si scriverebbe: MCMXCIV.

Come è facile immaginare, il sistema di numerazione latino oggi sarebbe del tutto inutilizzabile perché la quantità di simboli da usare per esprimere grandi numeri sarebbe davvero enorme.

 

La notazione posizionale

Il sistema in cui scriviamo i numeri è posizionale. Si tratta di una caratteristica importantissima che lo distingue da altri sistemi usati in passato e che storicamente si è imposto come il più pratico agevolando moltissimo la pratica del calcolo

“Posizionale” significa che le cifre vengono interpretate a seconda della loro posizione all’interno del simbolo usato per rappresentare il numero. Così come viene insegnato fin dai primissimi anni di scuola, la scrittura 372 è un modo convenzionale per indicare il risultato del calcolo 3×100+7×10+2×1 cioè la quantità che otteniamo sommando 2 unità a 7 decine a 3 centinaia (leggendo da destra a sinistra). Utilizzando le potenze di 10 (e ricordando che qualunque numero positivo elevato alla potenza 0 dà come risultato 1) lo possiamo riscrivere come 3×102+7×101+2×100.

In maniera analoga, facendo ricorso a potenze di 10 successive e utilizzando unicamente le dieci cifre 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, possiamo rappresentare qualunque numero intero. Il numero 10 viene per questo indicato come la base del sistema di numerazione.

I moderni sistemi di numerazione, a differenza di quello latino, sono sistemi posizionali, nel senso che una cifra assume un valore diverso a seconda del posto occupato all’interno del numero.

Possiamo a questo punto esprimere alcune considerazioni di carattere generale.

 

  • Il numero di cifre usate in un sistema di numerazione prende nome di BASE.
  • Le potenze crescenti della base definiscono il PESO di ciascuna singola cifra.
  • Mediante una notazione di tipo posizionale è possibile ottenere, con diverse basi numeriche, rappresentazioni equivalenti dello stesso numero.

 

Pertanto, si può pertanto definire un sistema di numerazione, nel seguente modo:

 

un sistema di numerazione è un complesso di simboli (cifre) e di regole aventi lo scopo di produrre ulteriori simboli diversi fra di loro ed in corrispondenza biunivoca con le grandezze numeriche da rappresentare.


In sostanza, per avere un sistema di numerazione bisogna disporre di un insieme di cifre da associare secondo determinate regole per rappresentare le grandezze numeriche, in modo non ambiguo.

Il concetto di sistema di numerazione non è certo stata una conquista semplice per la mente umana. L’uomo ha dovuto, prima di tutto, superare l’idea del singolo oggetto concreto e cominciare a ragionare per concetti astratti. È immediato dire “questa mela, quest’altra mela” eccetera, perché ogni mela è, di per sé, un oggetto distinto da ogni altra mela. Dire “due mele” o qualcosa del genere, implica un grande salto di qualità nel rapporto con la realtà, perché una tale espressione può essere pensata solo se si va oltre il singolo oggetto, con i suoi particolari connotati, e si comincia a ragionare per modelli: non più la singola mela, “quella” ben precisa mela, ma il concetto di mela, cioè l’idea della mela costruita nella nostra mente. Solo quando si è compiuto un salto logico di questo tipo diventa possibile rappresentare insiemi di oggetti tramite i numeri. Se dico che Marco, Luigi e Andrea sono tre uomini, implicitamente includo tutti e tre nel concetto di “uomo” che ho in mente, prescindendo dal fatto che ciascuno di essi ha le sue caratteristiche particolari, e quindi non importa che Marco sia biondo o che Luigi abbia i baffi o che Andrea ami la musica.

È molto probabile, infine, che il concetto di numero ed i sistemi di numerazione siano nati da esigenze di scambio e di commercio fra gli uomini, così come la geometria è nata dal bisogno di definire dimensioni e confini degli appezzamenti di terreno.

I motivi della scelta del numero 10 sono storicamente molto discussi. Secondo un’osservazione che risale almeno ad Aristotele. deriverebbe dal numero delle dita delle mani dell’uomo, cioè del primo “strumento” utilizzato per contare gli oggetti.

Sarebbe questo il motivo del successo di sistemi a base quinaria (in base 5) e decimale (in base 10), che sarebbero però di introduzione più recente rispetto a sistemi binari (in base 2), ternari (in base 3) e quaternari (in base 4).

Di questi ultimi particolarmente antichi, rimangono documentazioni incomplete e frammentarie, dato che le origini del concetto di numero e della pratica del contare affondano le loro radici nella preistoria, molto prima della nascita della civiltà e della scrittura (il reperto più noto, relativamente recente, è un osso rinvenuto in Europa centrale, risalente a circa 30.000 anni fa e recante incise 55 tacche raccolte in gruppi di cinque).

Molto più abbondanti i “fossili linguistici”. come il termine indoeuropeo che indica il numero 8, probabilmente una forma duale di “quattro”, e il termine latino novem (“nove”) che sembra derivare da novus (“nuovo”), a indicare l’inizio di una nuova serie, in riferimento a un sistema in base 8. Più recenti, prima del prevalere definitivo del sistema decimale (documentato anche nei termini inglesi eleven – 11 – e twelve – 12 – che significherebbero “uno in più” e “due in più”), sarebbero forme come il danese halvfirsindstyve, che significa “ a metà strada tra 3 e 4 volte 20, a indicare il numero 70, e il francese quatre-vingt, cioè “quattro volte 20, che designa 80, a testimonianza di sistemi in base 20 (le dita delle mani più quelle dei piedi). Non stancano esempi di sistemi ancora più complessi e bizzarri, come quello sessagesimale (in base 60), in uso presso i babilonesi e di cui resta ancor oggi traccia nella suddivisione dei minuti in secondi, delle ore in minuti e nella misurazione degli angoli.

Non c’è un motivo teorico per privilegiare una base rispetto ad un’altra, ma solo pratico: indipendentemente dalle sue eventuali origini antropologiche, la base 10 si è imposta perché permette di rappresentare numeri relativamente grandi utili in maniera sintetica e utilizzando un numero ragionevole di cifre. Per altri usi, essa è decisamente poco pratica: “Dal punto di vista matematico è un peccato che l’uomo di Cro–Magnon e i suoi discendenti non avessero quattro o sei dita per ogni mano”, afferma lo storico della matematica Carl B. Boyer.


Qualche esempio

In generale, se N è un numero positivo, possiamo sceglierlo come base e rappresentare i numeri interi tramite successioni di N simboli d1,d2, d3, …, (le cifre del sistema) che rappresentano i valori tra 0 e N – 1 (da cui deduciamo che N deve essere almeno 2). Se N>10, per i primi 10 si conservano di solito le familiari cifre da 0 a 9 e per i successivi si ricorre alle lettere dell’alfabeto latino. In base N=16, per esempio, le cifre utilizzate sono 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F dove A=10, B=11, C=12, D=13, E=14, F=15. Poiché nei sistemi posizionali le cifre indicano il numero di volte per cui contare la corrispondente potenza della base (a partire da destra, con la potenza 0–sima, cioè l’unità), possiamo affermare che in base 16 la scrittura 30DB rappresenta il valore 3×163+0×162+D×161+B×160 che in base 10 scriveremmo come 3×4096+0+13×16+1=11507.

Quando il contesto può dare adito a confusione o ambiguità, è buona regola specificare la base nella quale si sta onerando. indicandola esplicitamente in piccolo, a fianco del numero. Così, la scrittura 30DB16 ci dice che il numero 30DB è da intendere in base 16 e non in qualche altra base superiore, in cui il simbolo 30DB sarebbe comunque definito ma avrebbe un valore diverso. Secondo il calcolo effettuato poco fa, possiamo scrivere 30DB16=1150710

Più in generale con a, b, czN indichiamo un numero rappresentato in base N dalle cifre a, b, c, …, z, scelte tra le N cifre del sistema d1, d2, d3, …, dN–1.

Così, 57 e 510 sono rappresentazioni in base 7 e 10, rispettivamente, del medesimo valore numerico; 357 rappresenta invece un numero diverso da 3510.

Infatti 357=3×71+5×70=21+5=2610≠3510.

Le regole per eseguire operazioni – e in generale tutta l’aritmetica in basi diverse da 10 – sono identiche a quelle tradizionali, semplicemente tutti i numeri sono espressi utilizzando le N cifre del sistema in base N del caso.

Se da un punto di vista teorico il cambiamento di base è poco più di una curiosità aritmetica, in alcune situazioni concrete esso può invece costituire la differenza tra calcoli elaborati e complessi piuttosto che semplici ed eleganti. Nel corso dei secoli lo hanno scoperto a proprie spese i progettisti di macchine calcolatrici, dalle tradizionali e ormai obsolete calcolatrici da tavolo meccaniche ai moderni computer.

Ma ora siamo pronti per rispondere alla domanda del titolo.

 

LE DITA DEI MARZIANI SONO…

Supponiamo che un marziano, chiacchierando con un terrestre che non abbia del tutto dimenticato l’algebra studiata a scuola, ci comunichi che l’equazione di secondo grado x2–16x+41=0 ammette due soluzioni, la cui differenza è 10.

Naturalmente il marziano intende i numeri 10, 16 e 41 nella propria base di numerazione (pari al numero delle sue dita) che a noi è ancora ignota e che chiameremo N. Cioè, più precisamente, il marziano sta parlando dei numeri 10N, 16N, 41N.

Osserviamo che N è almeno 7 (perché la cifra più alta che compare è il 6) e che tutte le cifre inferiori a N (quindi almeno da 0 a 6) hanno lo stesso significato sia per noi che per i marziani. La seguente tabella ci indica di quali numeri parla il marziano.

 

Rappresentazione

Numero

10N

N

16N

N+6

41N

4N+1

 

Il terrestre non del tutto a digiuno di algebra ricorderà a questo punto che per una equazione di secondo grado del tipo ax2+bx+c=0 la differenza tra le due soluzioni è data da:


b2

e quindi, sostituendo secondo le indicazioni del marziano i valori a=1, b=N+6, c=4N+1:

 

n6

 

Risolvendo questa semplice equazione (come il terrestre non avrà problema a fare) otteniamo N=8, da cui risulta che i marziani hanno 8 dita (anche se non necessariamente quattro per mano).

 

I sistemi di numerazione in base diversa da dieci

 

Sistema ottale

Abbiamo visto che non è necessario che si utilizzino dieci simboli; possiamo allora pensare di utilizzarne otto e precisamente le cifre da 0 a 7; il sistema ottale fa pertanto uso dei seguenti simboli:

0, 1, 2, 3, 4, 5, 6, 7

 

Si chiamerà quindi sistema in base 8 ed i pesi delle singole cifre in una stringa numerica ottale saranno dati da potenze di 8.

Dovendo convertire in decimale il numero ottale:

 

3758=3×82+7×81+5×80=3×64+7×8+5×1=25310

 

Più complicato è il discorso per quanto riguarda la conversione inversa, cioè il passaggio da decimale in ottale. Il concetto basilare che bisogna acquisire è che ciò che in decimale viene espresso mediante l’uso di dieci simboli deve essere «distribuito» in 8 cifre. Ma distribuito vuol dire diviso, quindi l’idea di fondo è che si debba ricorrere per questo tipo di conversione ad una serie di operazioni di divisione.

Facciamo un esempio: vediamo come si può procedere alla conversione del numero decimale 25310 nel corrispondente numero ottale.

Il primo passo è dividere 253 per 8; tale divisione dà come risultato 31 con resto di 5.

Teniamo da parte il 5 e dividiamo nuovamente 31 per 8, vediamo che il risultato è 3 con resto di 7.

Teniamo da parte il 7 e dividiamo 3 per 8; ovviamente otteniamo come risultato 0 con resto di 3.

Avendo ottenuto quoziente nullo il procedimento si arresta.

A questo punto possiamo dire che il primo resto che abbiamo trovato è la cifra ottale meno significativa (quella di peso 80 per il nostro numero), mentre l’ultimo resto che abbiamo trovato è la cifra più significativa (quella di peso 82 per il nostro numero); possiamo vedere meglio il risultato ottenuto costruendo la seguente tabella:

 

Operazione

Quoziente

Resto

253/8

31

5

31/8

3

7

3/8

0

3

 

Ragionando come indicato prima, la cifra più significativa del numero ottale è il 3, poi viene il 7 ed infine il 5, che è la cifra meno significativa; pertanto risulta:

25310 = 3758


Sistema esadecimale

Il sistema di numerazione esadecimale utilizza, come indica il nome stesso, sedici simboli e precisamente:

 

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

 

dove le lettere A, B, C, D, E, F sono equivalenti ai numeri decimali da 10 a 15, secondo lo schema: A corrisponde a 10, B corrisponde a 11, C corrisponde a 12, D corrisponde a 13, E corrisponde a 14, F corrisponde a 15.

Per il sistema esadecimale vale la notazione posizionale esattamente come è stata utilizzata in precedenza, ovvero si avrà un sistema con base 16 e i pesi di ogni singola cifra saranno indicati con potenza crescente della base 16, da 160 per la cifra meno significativa fino a 16k per la k–esima cifra.

La conversione dal sistema esadecimale al sistema decimale avviene esattamente come indicato per i numeri ottali ovvero, dato ad esempio il numero esadecimale F1416 la conversione si ottiene mediante il procedimento seguente:

 

F1416 = F×162+1×161+4×160 = 15×162+1×161+4×160 =

= 15×162+1×161+4×160 = 15×256+1×16+4×1 = 386010

 

Per quanto riguarda la conversione inversa, ovvero da decimale in esadecimale, è necessario nuovamente «distribuire» su 16 cifre ciò che nel sistema decimale viene espresso mediante dieci simboli; il procedimento è analogo a quanto visto per il sistema ottale, ovvero si utilizza il metodo delle divisioni successive per 16 del numero che vogliamo convertire.

Esempio

Si voglia convertire in esadecimale il numero 3860.

Il primo passo consiste nel dividere 3860 per 16; tale divisione dà come risultato 241 con resto di 4.

Teniamo da parte il 4 e dividiamo 241 nuovamente per 16; otteniamo 15 con resto di 1.

Teniamo da parte 1 e dividiamo 15 per 16; otteniamo 0 con resto di 15.

Avendo ottenuto quoziente nullo il procedimento si arresta. A questo punto si procede esattamente come per i numeri ottali cioè il primo resto che abbiamo trovato è la cifra meno significativa (quella di peso 160), mentre l’ultimo resto che abbiamo trovato è la cifra più significativa (quella di resto 162); possiamo vedere meglio il risultato ottenuto costruendo la tabella:

 

Operazione

Quoziente

Resto

3860/16

241

4

241/16

15

1

15/16

0

15→F

 

Ovviamente, dato che la cifra più significativa è 15 e visto che nel sistema esadecimale viene indicata con F, otteniamo F come cifra più significativa e pertanto:

 

386010 = F1416

Il sistema binario

Il minor numero di simboli utilizzabili per rendere possibile una notazione posizionale è 2, pertanto b = 2 è la base più piccola e comporta l’uso di due soli simboli, 0 ed 1. Da questo ragionamento si deduce che non possono esserci sistemi di numerazione posizionale in base 1 oppure in base 0, perché nel primo caso esisterebbe una sola cifra, lo 0, mentre nel secondo caso non avremmo alcuna cifra. Detto questo è da osservare che un sistema basato su due sole cifre permette di sfruttare al meglio la logica e le conclusioni dell’algebra booleana, e quindi ben si presta ad essere utilizzato in ambito elettronico ed informatico.

Un numero binario è rappresentato da una stringa di simboli contenente soltanto i numeri 0 ed 1; ad esempio 10011012 è un numero binario. Le singole cifre binarie (ovvero 1 e 0) sono chiamate BIT dalla contrazione delle parole inglesi binary digit il cui significato è proprio quello di cifra binaria; per questo d’ora in avanti verrà usato indifferentemente il nome BIT oppure la denominazione «cifra binaria». La conversione da binario in decimale avviene usando le solite regole della notazione posizionale, tenendo conto che in questo caso la base è 2 e quindi i pesi saranno espressi mediante potenze crescenti di 2. Ad esempio, il numero binario 10011012 viene convertito in decimale con il seguente procedimento:

 

10011012 = 1×20+0×21+1×22+1×23+0×24+0×25+1×26 =

= 1+0×2+1×4+1×8+0×16+0×32+1×64 = 7710

 

Per quanto riguarda la conversione da decimale in binario si procede come per gli altri sistemi numerici che adottano la notazione posizionale è cioè necessario «distribuire» su due simboli ciò che normalmente viene indicato con dieci simboli; il procedimento consiste perciò in una serie di divisioni successive per due.

Supponiamo ad esempio di voler convertire il numero decimale 7710, in binario, si procede nel modo seguente:

 

Prendiamo 77, dividiamo per 2 ed otteniamo 38 con resto 1.

Prendiamo 38, dividiamo per 2 ed otteniamo 19 con resto 0.

Prendiamo 19, dividiamo per 2 ed otteniamo 9 con resto 1.

Prendiamo 9, dividiamo per 2 ed otteniamo 4 con resto 1.

Prendiamo 4, dividiamo per 2 ed otteniamo 2 con resto 0.

Prendiamo 2, dividiamo per 2 ed otteniamo 1 con resto 0.

Prendiamo 1, dividiamo per 2 ed otteniamo 0 con resto 1.

Avendo ottenuto quoziente nullo il procedimento si arresta.

Il primo resto che abbiamo trovato rappresenta la cifra meno significativa (quella di peso 20), mentre l’ultimo resto che abbiamo trovato rappresenta la cifra più significativa (quella di peso 26 per il nostro esempio); il numero decimale 7710 sarà allora convertito in binario nel modo seguente:

7710 = 1001102

L’introduzione del sistema binario ci permette di costruire, con il semplice uso delle conversioni di base, alcune tabelle che permettono di comparare il sistema binario direttamente al sistema ottale ed al sistema esadecimale.

Nella tabella sono riportate le cifre decimali, le corrispondenti cifre ottali e le corrispondenti stringhe binarie. Viene messo chiaramente in evidenza quanto avevamo esposto all’inizio e cioè che nel sistema di notazione posizionale uno stesso concetto numerico può essere espresso in modi diversi.

Per costruire la tabella sono state effettuate le conversioni di ciascuna cifra decimale da 0 a 7 prima in ottale (ed in questo caso c’è perfetta corrispondenza) e poi in binario.

Decimale

Ottale

Binario

0

0

000

1

1

001

2

2

010

3

3

011

4

4

100

5

5

101

6

6

110

7

7

111

Un’analoga tabella si può costruire per il sistema esadecimale.

Tali tabelle sono utili per la conversione diretta binario – ottale, ottale – binario,binario – esadecimale, esadecimale – binario.

Decimale

Esadecimale

Binario

0

0

0000

1

1

0001

2

2

0010

3

3

0011

4

4

0100

5

5

0101

6

6

0110

7

7

0111

8

8

1000

9

9

1001

10

A

1010

11

B

1011

12

C

1100

13

D

1101

14

E

1110

15

F

1111

Conversione diretta binario – ottale

Consideriamo il numero binario 1001101112, per convertirlo direttamente in ottale si procede così:

si parte da destra (cifra meno significativa) e si separano gruppi di 3 bit:

100 / 110 / 111

si osserva che ciascun gruppo corrisponde tramite la tabella precedente ad una cifra ottale e si riportano tali corrispondenze, sempre procedendo da destra verso sinistra:

111 = 7 110 = 6 100 = 4

La cifra ottale corrispondente al gruppo più a destra è la cifra meno significativa, mentre la cifra ottale corrispondente al gruppo più a sinistra è la cifra più significativa, pertanto il numero cercato è:

4678

 

Conversione diretta ottale – binario

Consideriamo il numero ottale 4078 la conversione diretta in binario avviene nel modo seguente:

si considerano le singole cifre ottali partendo da destra ed andando verso sinistra; si legge sulla tabella a quale stringa di bit corrisponde ciascuna cifra e si riportano tali corrispondenze, sempre procedendo da destra verso sinistra:

7 = 111 0 = 000 4 = 100

la stringa corrispondente alla cifra più a destra è da mettere come meno significativa, quella corrispondente alla cifra più a sinistra è da prendere come più significativa:

100 / 000 / 111

il numero binario richiesto allora sarà:

1000001112

Se per caso nello svolgere la conversione diretta binario-ottale ci accorgiamo che l’ultima stringa di bit contiene solo un bit oppure due, basterà aggiungere degli zeri a sinistra fino a che la stringa arriva a comprendere 3 bit; ad esempio, si voglia convertire direttamente in ottale il numero binario 10011012, suddividendo in gruppi da 3 bit si ottiene:

1 / 001 / 101

aggiungendo due zeri a sinistra non si modifica il numero (perché lo zero dà un contributo nullo), ma ci si riconduce a stringhe tutte da 3 bit:

001 / 001 / 101

ed il numero ottale cercato è allora 1158, infatti dalla tabella si ricava:

101 = 5 001 = 1 001 = 1

 

Conversione diretta binario – esadecimale

Si procede esattamente come nel caso della conversione diretta binario – ottale, solo che qui i gruppi saranno di 4 bit; ad esempio volendo convertire il numero 1011001101102 si procede così:

si suddivide il numero binario in gruppi di 4 bit:

1011 / 0011 / 0110

si converte ciascun gruppo, usando la tabella ed andando da destra verso sinistra:

0110 = 6 0011 = 3 1011 = 11→B

il numero cercato, mantenendo sempre l’ordine da destra verso sinistra è B3616.

Qualora l’ultimo gruppo avesse un numero di bit inferiore a 4, basterà aggiungere degli zeri a sinistra e procedere poi esattamente come nel caso dei numeri ottali.

 

Conversione diretta esadecimale – binario

Anche in questo caso basta procedere esattamente come nel caso della conversione diretta ottale – binario, solo che si utilizzerà la seconda tabella; ad esempio volendo convertire il numero A03516 si procede, sempre da destra verso sinistra, nel modo seguente:

5 = 0101 3 = 0011 0 = 0000 A = 1010

Pertanto il numero esadecimale assegnato corrisponde al binario: 10100000001101012.

 

Le operazioni con i numeri binari

Quando vogliamo comunicare dei dati a un calcolatore, non dobbiamo dimenticare che la sua logica è intrinsecamente binaria: acceso/spento, magnetizzato/smagnetizzato, sì/no, vero/falso, sono gli stati tipici (e i valori logici equivalenti) della maggior parte dei componenti del computer. La memoria centrale, in particolare, sia ai tempi dei vecchi nuclei magnetici che ai giorni nostri, con gli attuali chip in silicio, può essere schematizzata (e, di fatto, è materialmente costituita) da una successione di celle che in ciascun momento possono trovasi in uno soltanto di due stati fisicamente possibili. Se chiamiamo questi due stati “0” e “1”, ecco che qualunque configurazione della memoria e di sue porzioni diventa interpretabile come una sequenza di “0” e di “1”, cioè di numeri interi in base 2. Questo significa che quando quelli che vogliamo rappresentare sono proprio numeri interi, il gioco è fatto: senza dovere ricorrere a nessuna ulteriore codifica o interpretazione li ritroviamo direttamente in memoria. È in questo senso che la numerazione in base 2 è la più naturale per un computer: perché è possibile interpretare direttamente le successioni di stati di celle di memoria come numeri interi.

 

O “1” O “0”

Come già sappiamo in linea di principio non c’è nessuna differenza a eseguire operazioni aritmetiche in una base anziché un’altra. In teoria si sarebbe tentati di passare dalla base in cui si deve lavorare alla base 10, con cui abbiamo maggiore familiarità. per poi riportare il risultato nella base di partenza.

Consideriamo il calcolo:

1112+1012

convertendo in base 10, avremmo:

1112 = 710 1012 = 510

poi,eseguendo il calcolo:

710+510 = 1210

Infine, tornando in base 2:

1210 = 11002

La verifica che ciascuna delle rappresentazioni in base due corrisponda al numero in questione è semplice e può essere effettuata direttamente, ricordando che in un sistema posizionale, a partire da destra le cifre rappresentano le potenze successive della base. Naturalmente, esiste un algoritmo generale per passare dalla rappresentazione di un numero in una data base a quella in un’altra ed è quindi possibile delegare queste operazioni – piuttosto tediose, in verità – a programmi per computer opportuni.

Per eseguire operazioni in una data base, come addizioni e moltiplicazioni è molto più pratico costruire le relative tabelline, del tutto analoghe a quelle che vengono insegnate a scuola per i numeri in base 10. È infatti sufficiente sapere sommare o moltiplicare tra di loro i numeri da 0 a 9, che e il caso a cui ci si riconduce sempre col sistema dei riporti.

In base 2, le tabelline di addizione e moltiplicazione sono particolarmente semplici:

0+0 = 0 0+1 = 1+0 = 1 1+1 = 0 con riporto di 1

 

+

0

1

0

0

1

1

1

0

 

Le regole del prodotto sono:

 

0×0 = 0 1×0 = 0×1 = 0 1×1 = 1

 

×

0

1

0

0

0

1

0

0


Queste tabelline mostrano che per eseguire operazioni in base 2 si procede esattamente come per le consuete operazioni in base dieci, ricordando che quando il risultato di una addizione o di una moltiplicazione raggiunge il valore della base, (il che può capitare solo sommando due 1”), il risultato dell’operazione è “0 con riporto di una unità alla potenza (cioè alla posizione successiva). Più precisamente, 1+1=10. Ora siamo pronti a sommare direttamente in base due:

 

Addizione di numeri binari

Si vogliono sommare tra loro i numeri binari 101012 e 1112: per facilitare la comprensione del procedimento vediamo in parallelo lo svolgimento decimale e lo svolgimento binario:

 

BINARIO

DECIMALE

Riporti

011111

 

1° Addendo

10101+

21+

2° Addendo

111=

7=

Risultato

11100=

28=

Come si può osservare dall’esempio basta eseguire le somme in colonna applicando in modo automatico le regole enunciate e si ottiene il risultato corretto; bisogna prestare molta attenzione ai riporti, per questo motivo sarebbe utile segnalarli sempre perché è molto elevato il rischio di lasciarne qualcuno per strada. È consigliabile inoltre svolgere le operazioni in colonna proprio come indicato nell’esempio per evitare di impantanarsi in calcoli inutili.

Potrebbe capitare che, sommando due numeri, il risultato sia costituito da un numero di cifre binarie maggiore di quelle degli addendi originari, questo è normale anche nel sistema decimale, infatti se sommiamo 9 e 8 otteniamo:

 

BINARIO

DECIMALE

Riporti

0111111

10+

1° Addendo

1001+

9+

2° Addendo

1000=

8=

Risultato

11001=

17=

 

Sottrazione tra numeri binari

Anche per quanto riguarda la sottrazione tra numeri binari valgono le regole dell’aritmetica elementare e le operazioni vengono svolte in colonna secondo le seguenti regole:

0–0 = 0

1–1 = 0

1–0 = 1

0–1 = 1 con un prestito di 1 dalla cifra precedente

 

Quest’ultima regola è la più difficile da comprendere ed è bene chiarirla con un esempio:

 

 

BINARIO

DECIMALE

1° Addendo

1001011–

75–

2° Addendo

101=

5=

Risultato

1000110=

70=

 

Potrebbe capitare, svolgendo un’operazione di sottrazione binaria, che non sia possibile chiedere un prestito alla cifra immediatamente vicina perché essa è 0, in questo caso si chiede un prestito al primo 1 che si trova verso sinistra, e tutti gli 0 che «sorvoliamo» vengono trasformati in 1.

Un esempio chiarisce meglio il concetto:

 

BINARIO

DECIMALE

1° Addendo

1010001–

81–

2° Addendo

110=

6=

Risultato

100101=

75=

 

Moltiplicazione tra numeri binari

La moltiplicazione evidenzia la semplicità di operare in base 2. Infatti è possibile svolgere tale operazione in colonna, usando le regole aritmetiche. Vediamo solo un esempio di prodotto tra numeri binari:

 

10110×

101=

10110

00000–

10110–

1101110

 

Cioè 26+25+23+22+2=11010.

 

Divisione tra numeri binari

È un’operazione ancor meno usuale della moltiplicazione, comunque anche per la divisione si opera come nel sistema decimale con le usuali regole aritmetiche. Supponiamo di voler effettuare la divisione 14:2, vediamo lo svolgimento sia in binario sia in decimale:

 

1110

100

1000

111

0110

 

0100

 

010

 

10

 

0

 

 

14

2

14

7

0

 

 

La rappresentazione dei numeri relativi

L’operazione di sottrazione tra due numeri è solitamente data da minuendo meno sottraendo. Dal punto di vista algebrico può essere considerata equivalente alla somma tra il minuendo ed il sottraendo cambiato di segno, pertanto la differenza può essere ricondotta ad una somma se facciamo ricorso ai numeri negativi. Una rappresentazione particolarmente usata è quella detta in modulo e segno, con la quale si usa il bit più significativo per individuare il segno, secondo la convenzione seguente:

  • i numeri positivi hanno il bit più significativo pari a 0;
  • i numeri negativi hanno il bit più significativo pari ad 1.

I rimanenti bit rappresentano il modulo, ovvero il valore assoluto, del numero stesso; questo tipo di rappresentazione rende necessario aggiungere un bit oltre a quelli necessari per l’usuale rappresentazione del numero. Ad esempio con quattro bit possiamo rappresentare tutti i numeri compresi tra + 7 e – 7. Il difetto, come possiamo vedere dalla tabella, è che esistono due rappresentazioni dello 0 e precisamente 0000 (cioè + 0) e 1000 (cioè – 0).


 

Bit relativo al segno

Bit relativo al modulo

Numero corrispondente

0

111

+7

0

110

+6

0

101

+5

0

100

+4

0

011

+3

0

010

+2

0

001

+1

0

000

+0

1

000

–0

1

001

–1

1

010

–2

1

011

–3

1

100

–4

1

101

–5

1

110

–6

1

111

–7

 

La rappresentazione in complemento a due

Per rappresentare i numeri relativi è molto conveniente ricorrere a questo metodo, anche perché è decisamente più facile da implementare con circuiti elettronici. Per poter apprendere tale metodo è necessario acquisire il concetto di complemento alla base, valido per tutti i sistemi e non solo per il sistema binario.

 

Dato un sistema di numerazione in base b ed un numero N di n cifre, si definisce complemento del numero alla base e si indica con N(b) la differenza tra la potenza ennesima della base ed il numero dato:

N(b)=bn–N

Per esempio, calcoliamo i complementi alla base dei numeri in base 10: 1.392; 81; 43.290.

 

104 – 1.392 = 8.608 102 – 81 = 19 105 – 43.290 = 56.710

 

Notare, come regola pratica, che la potenza cui è elevata la base è sempre uguale al numero delle cifre costituenti il numero da complementare. Nel primo caso, per esempio, la base 10 è elevata alla quarta potenza perché 8.608 è composto da 4 cifre.

Cerchiamo di comprendere adesso l’utilità del complemento alla base. Supponiamo di dover eseguire la sottrazione 491 – 312, o , in modo equivalente, la somma 491 + (– 312).

Calcoliamo prima il complemento alla base del numero 312:

102 – 312 = 688

Adesso sommiamo a 491 il complemento di 312:

491 + 688 = 1.179

 

Eliminando l’1 iniziale otteniamo 179 che è proprio il risultato cercato.

L’ utilità di questo metodo è evidente: la differenza fra due numeri si riconduce alla somma, e pertanto tutte e quattro le operazioni possono essere effettuate tramite somme (previo complementazioni). È quello che accade in realtà nei circuiti elettronici destinati alla elaborazione numerica.

L’estensione al caso del sistema binario è immediata. Vediamo qualche esempio, calcolando i complementi alla base dei numeri 101 e 1100.

23 – 101=1000 – 101=11

24 – 1101 = 10000 – 1100 = 100

 

È immediato obiettare che l’operazione di complementazione richiede in ogni caso che si esegua una differenza. Per questo motivo, specialmente in binario, si utilizza di preferenza il metodo del complemento ad uno, che è un caso particolare del metodo del complemento alla base 1.

 

Metodo del complemento ad 1

Accanto alla definizione di complemento a due è possibile inserire quella di complemento a uno.

Dato un numero N espresso da n cifre, si definisce complemento ad 1 del numero e si indica con N(1) la seguente espressione:

N(1) = (bn–1) – N

In generale il complemento alla base 1 non è altro che il complemento alla base al quale viene sottratta una unità. Per esempio, il complemento alla base 1 del numero (in base 10) 861 è semplicemente:

(103 – 1) – 861 = 138

Ai fini pratici, il complemento alla base 1 si ottiene complementando alla base e sottraendo 1 al risultato.

Calcoliamo il complemento ad 1 del numero binario 1001:

24 – 1 – 1001 = 10000 – 1 – 1001 = 1111 – 1001 = 0110

 

Dove si è volutamente lasciato lo zero iniziale nel risultato, pur non essendo significativo, per mettere in risalto una regola pratica importantissima:

Il complemento ad 1 di un numero binario si ottiene complementando ogni sua singola cifra (cioè scambiando 0 con 1 e viceversa).

Tramite il metodo del complemento ad 1 risulta superato il problema della esecuzione di una differenza per complementare un numero binario alla base.

Analogamente per quanto riguarda il complemento a due è possibile dare la seguente definizione:

Il complemento a 2 di un numero binario assegnato si ottiene dal numero di partenza, calcolando il complemento ad 1 di quest’ultimo e poi aggiungendo 1 ovvero:

N(2) = N(1)+1

Consideriamo, ad esempio, il calcolo del complemento alla base del numero binario N = 1011002 = 4410.

Calcoliamo prima il complemento ad 1 che risulta essere pari a: 010011.

Pertanto il complemento a 2 risulta 010011 +1 = 010100.

Per maggiore sicurezza facciamo una verifica:

N(2) = 26 – 101100 = 1000000 – 10110001 = 010011

Che corrisponde esattamente al nostro risultato, a parte lo zero iniziale non significativo.


Conclusioni

L’inconveniente principale della rappresentazione binaria è che richiede molte cifre per esprimere numeri piccoli. Per esempio, 8710 = 1010111.

Prima di trovare la sua applicazione principe nell’aritmetica dei calcolatori, il sistema binario è stato a lungo una curiosità per matematici, che consideravano particolarmente elegante la sua semplicità. Il filosofo matematico Gottifried Wilhelm Leibniz (1646 – 1716) ne era entusiasta, tanto da far scrivere a Laplace (1749 – 1827), altro eminente matematico: “Leibniz vide in questa aritmetica binaria l’immagine della creazione. Egli immaginò che l’Unità rappresentasse Dio e lo zero il vuoto; e che l’Ente Supremo avesse tratto tutti gli esseri dal vuoto, precisamente come l’unità e lo zero esprimono tutti i numeri in questo sistema di numerazione”.

Esercizi:

  • Convertire in esadecimale ed ottale i seguenti numeri decimali: 236, 435, 8765, 65536, 64, 876;
  • Convertire in binario i seguenti numeri decimali: 32, 54, 16, 48, 254, 123, 445;
  • Convertire direttamente in binario i seguenti numeri ottali: 44, 75, 107, 447, 124;
  • Convertire direttamente in binario i seguenti numeri esadecimali: A034, A042, F117, 56B2;
  • Convertire in decimale i seguenti numeri binari: 11001, 111111, 1001100, 11000111, 1100110;
  • Convertire direttamente prima in esadecimale e poi in ottale i seguenti numeri binari: 1000111100, 1110011, 1111111100, 110000011, 110010.

 

Esercizi

  • Eseguire le seguenti somme in binario:

10000111 + 111001;

100001111011 + 1011000101;

1000000 + 10000;

10001100101 + 100001.

  • Eseguire le seguenti sottrazioni in binario:

100001111 – 101100;

10000101 – 11101.

  • Scrivere in complemento ad 1 e poi in complemento a 2 i seguenti numeri binari:

1000111100, 1110011, 1111111100, 110000011, 110010.

  • Eseguire i seguenti prodotti tra numeri binari:

10001110 ×101;

100011110´1001.

{/gspeech}

Commento all'articolo