dal 2015 - visita n. 3005
Sistemi di numerazione
Sistemi di numerazione

 

Sistemi di numerazione

Prima di addentrarci nell'analisi dei sistemi di numerazione diciamo subito che nel seguito chiameremo con il termine stringa numerica ognuna delle seguenti espressioni:

MMXIV
2014

che, nel caso specifico, rappresentano rispettivamente il numero 2014 nel sistema romano e nell'attuale sistema di numerazione in base dieci.

I due sistemi di numerazione usano simboli diversi e regole diverse per interpretare il significato delle rispettive stringhe numeriche. In estrema sintesi possiamo però dire che:

Un sistema di numerazione è un modo per rappresentare i numeri che viene realizzato con l'aiuto di due componenti:
1) l'insieme dei simboli (detto anche alfabeto) da utilizzare per creare la stringa numerica,
2) le regole per la scrittura, la lettura e la valutazione della stringa numerica.


Il sistema di numerazione romano, utilizzato ancora oggi in certe circostanze, è un sistema di tipo additivo. Lo si ritrova nella numerazione dei capitoli dei libri o nella numerazione dei paragrafi di una legge. L'insieme dei simboli utilizzato è preso a prestito dal normale alfabeto utilizzato per la scrittura, i Romani non usavano dei segni specifici per scrivere le cifre.
I simboli utilizzati dal sistema di numerazione romano sono:

{ I   V   X   L   C   D   M }

e ciascuno di essi rappresenta un valore base:

I=1   V=5   X=10   L=50   C=100   D=500   M=1000

Le regole per comporre le stringhe numeriche sono un poco articolate:

Il numero più alto che si può scrivere, seguendo queste regole, è   MMMCMXCIX=3999. Il simbolo M non si può, infatti, ripetere più di tre volte ed è l'ultimo simbolo dell'alfabeto numerico. Per rappresentare numeri più grandi i Romani introdussero delle barre orizzontali e verticali, da aggiungere attorno ai simboli, con la funzione di moltiplicatori per 1000 o altri valori necessari per i loro conteggi.

Questo sistema di numerazione non ha avuto grande continuità nei secoli, perchè presenta alcuni importanti limiti nelle applicazioni: la scrittura di grandi numeri; l'esecuzione dei calcoli, dal momento che i simboli non si possono incolonnare; l'impossibilità di rappresentare lo zero, le quantità negative, i numeri decimali e le frazioni.
Oggi pertanto il suo uso è rimasto confinato a funzioni decorative (quadranti di orologi o meridiane), o alla numerazione ordinale di capitoli e paragrafi.


Il sistema di numerazione a base 10, che viene utilizzato oggi, e che abbiamo imparato ad utilizzare fin da piccoli, è invece un sistema di tipo posizionale. Le stringhe numeriche vengono composte con un alfabeto di 10 segni:

{ 0   1   2   3   4   5   6   7   8   9 }

e ciascuno di essi rappresenta anche il suo valore base. A differenza di quanto abbiamo visto nel caso precedente, dove era facile distinguere il concetto di segno (L) da quello di valore (50), nel caso del nostro attuale sistema di numerazione è tale l'abitudine al suo uso che non riusciamo più a distinguere il concetto di segno dal concetto di valore. Per quanto dobbiamo analizzare, però, è opportuno tenere ben separata la differenza tra segno e valore.

Nelle regole per la composizione delle stringhe numeriche è fondamentale quella secondo cui il valore di ciascun segno dipende sia dal suo valore base sia dalla posizione che esso occupa all'interno della stringa. Se analizziamo la stringa numerica:

334

sappiamo benissimo che i due segni 3 hanno valori diversi: quello a sinistra vale 3 centinaia, quello accanto a destra vale 3 decine. Cioè il valore di ciascun segno dipende dalla posizione che esso occupa all'interno della stringa, ecco perchè a questo tipo di sistema di numerazione viene dato l'attributo di posizionale. Per evidenziare esplicitamente questo fatto possiamo riscrivere come segue il numero precedente:

3x100 + 3x10 + 4x1

oppure anche:

3x102 + 3x101 + 4x100

Si vede chiaramente, adesso, con l'uso della scrittura polinomiale, come ogni elemento della somma contenga il segno ed il peso di ogni componente della stringa numerica. Chiamiamo pesi le potenze per cui vengono moltiplicati i valori base dei singoli segni (cifre). Quindi il valore effettivo di ciascun segno dipende dal prodotto del suo valore base per il peso, il quale dipende dalla posizione occupata. Per questo motivo l'espressione precedente viene chiamata, oltre che polinomiale, somma pesata.
Più compiutamente il nostro attuale sistema di numerazione può essere denominato sistema di numerazione posizionale a base 10.

Il sistema è detto a base 10 per due motivi:
1) usa 10 segni,
2) usa una potenza con base 10 per assegnare il valore a ciascun segno nella stringa.

Lo zero assume un ruolo rilevante nei sistemi posizionali, funziona da segnaposto, infatti tiene traccia delle posizioni prive di unità di un certo ordine. Sempre con riferimento alla stringa precedente, se essa indica una somma di denaro:

334

per estrarre il 3 più a sinistra senza fargli perdere il suo valore dovrò scrivere:

300

La presenza, indispensabile, dei due zeri consente di mantenere il valore di quel segno 3, gli zeri segnaposto infatti servono a far mantenere al 3 la posizione assunta all'interno della stringa originale.


Fu Leonardo Pisano, vissuto a Pisa dal 1170 al 1250,
meglio noto come Fibonacci,
a introdurre in Europa luso delle cifre arabe
e dello zero, nel suo Liber Abaci (1202).

I segni che utilizziamo nel nostro sistema di numerazione si chiamano cifre indo-arabe, perchè sono stati inventati in India nel VI secolo d.C. e ci sono stati trasmessi dagli arabi. Nella definizione di sistema di numerazione posizionale l'alfabeto dei simboli è del tutto arbitrario, per cui potremmo sperimentare, solo a titolo di prova ad usare questo nuovo alfabeto numerico di 10 segni:

{ C   I   Z   E   A   S   G   T   B   P }

a cui associamo i valori base:

C=0   I=1   Z=2   E=3   A=4   S=5   G=6   T=7   B=8   P=9

Ed ecco l'aspetto che assumerebbero alcune delle stringhe numeriche utilizzate negli esempi precedenti:

ZCIA=2014   EEA=334   ECC=300

Teoricamente non cambierebbe nulla nei meccanismi di funzionamento del sistema numerico, ma ciò creerebbe una gran confusione nel contare quotidiano dal momento che da sempre siamo stati abituati ad usare altri segni. Ma l'esperimento ideale proposto serve soltanto a far toccare con mano la differenza tra valore e segno, ossia tra la realtà e la sua rappresentazione. E' come per le lingue, una certa realtà, come la madre, viene rappresentata in modi diversi a seconda della lingua usata:

mère(francese), mother(inglese), Mutter(tedesco), motina(lituano), móðir(islandese), mor(norvegese)

il concetto è lo stesso, ma solo tramite l'uso di una lingua straniera riusciamo a sdoppiare la realtà dalla sua rappresentazione, nella propria lingua infatti la parola evoca la realtà rendendo questa coincidente con la prima.


I sistemi di numerazione posizionali non necessariamente devono utilizzare la base 10, anzi è possibile, adattando opportunamente le stesse regole analizzate per la base 10, costruire dei sistemi di numerazione su altra base. A titolo di prova supponendo di volere costruire un sistema di numerazione a base 4, per prima cosa occorrerà scegliere un alfabeto dei simboli composto da 4 elementi. La scelta di quali debbano essere questi 4 simboli è del tutto arbitraria, ma per comodità, soltanto per pigrizia, utilizzeremo il seguente alfabeto:

{ 0   1   2   3 }

i cui quattro simboli avranno come valore base il corrispondente della base 10 a cui siamo da sempre abituati. Risulta pertanto chiaro che delle stringhe numeriche seguenti:

321   12230   4230   123A   2013

quelle colorate in verde sono corrette, mentre quelle colorate in rosso non sono ammissibili perchè contengono segni non appartenenti all'alfabeto dei simboli (il 4 nel primo caso, la A nel secondo caso). Le altre domande da farsi sono:
1) come si leggono queste stringhe numeriche ?
2) quale è il valore numerico di ciascuna stringa riportato al nostro consueto modo di contare ?

Le stringhe numeriche di basi diverse dalla nostra si leggono scandendo semplicemente le cifre una ad una da sinistra verso destra, perchè i concetti di decine, centinaia, migliaia, etc. hanno senso soltanto nella base 10. Nel caso in esame la prima stringa si leggerà semplicemente: tre due uno. A questo proposito, in contesti dove siano possibili ambiguità, per evidenziare che si tratta di stringhe numeriche in base 4 si dovranno scrivere, più correttamente, come segue:

3214   122304   20134

dove il numero pedice avverte che si tratta di stringhe numeriche in base 4.

Per il calcolo del valore facciamo ricorso alla solita espressione polinomiale, o somma pesata, dove semplicemente, al posto delle potenze in base 10, metteremo delle potenze in base 4, quindi avremo:

3214 = 3x42 + 2x41 + 1x40 = 48 + 8 + 1 = 57
122304 = 1x44 + 2x43 + 2x42 + 3x41 + 0x40 = 256 + 128 + 32 + 12 + 0 = 428
20134 = 2x43 + 0x42 + 1x41 + 3x40 = 128 + 0 + 4 + 3 = 135

Oltre ai risultati, notate che tutti i calcoli li abbiamo fatti in base 10, perchè quello è il nostro abituale modo di farli; le stringhe in base 4 sono scritte in verde e riportano il pedice per evitare ambiguità, mentre i calcoli ed i risultati, tutti in base 10, sono scritti in nero.

Oltre che conoscere il valore di una stringa numerica in una base diversa da 10 è spesso altrettanto importante il problema inverso, ossia conoscere come sarà espressa una stringa numerica in base 10 nella nuova base, nel nostro caso in base 4.
Si procede dapprima ad eseguire una serie di divisioni successive per il valore della base di destinazione, nel nostro caso 4. Questo processo ha termine quando si ottiene 0 come risultato dell'ultima divisione. A questo punto si raccolgono tutti i resti delle divisioni effettuate e si confeziona la stringa in base 4 scrivendo i resti dall'ultimo fino al primo. Questa procedura viene chiamata Metodo dei resti o delle divisioni successive.
Come esempi applicativi rieseguiamo al contrario i tre esempi precedenti: 57, 428, 135. Partiamo con il primo: 57. Per il calcolo ci si può organizzare tracciando una riga orizzontale e ponendo in alto i risultati delle divisioni per 4 ed, in corrispondenza, in basso i resti ottenuti, che nel caso in questione potranno variare tra 0 e 3. Ecco di seguito l'esempio sviluppato nei dettagli.

57 14 3 0
  1 2 3

In basso, in grassetto, abbiamo tutti i resti ottenuti, mentre la freccia indica il verso per ricostruire la stringa del risultato in base 4: 3214. E in modo analogo si procederà con gli altri 2 esempi, di seguito sviluppati nei dettagli.

428 107 26 6 1 0
  0 3 2 2 1

In basso, in grassetto, raccogliamo tutti i resti ottenuti in senso inverso e ricostruiamo la stringa in base 4: 122304.
Ed infine il caso del numero 135.

135 33 8 2 0
  3 1 0 2

Da cui ricostruiamo, come al solito, la stringa in base 4: 20134.

In conclusione per trattare delle stringhe in una base diversa da 10 (base aliena) servono 2 passaggi:


















Menù
Introduzione
I registri del Pentium
Il modello della memoria
Interazione CPU-RAM
I Servizi Linux - Int 80h
I File in Linux
Schema programma NASM
Esempi Write/Read
Esercizi
lods-stos-movs
gcc + nasm
Gestione Command Line
Stack
Stack-Esercizi
Libreria Funzioni Base
Esercizi con la Libreria
Libreria Macro Base
Test 5 esercizi


Sistemi di numerazione
Elementi Bistabili
Strutture di Controllo
Istruzioni JMP
Hello World
I/O di Testo
Command Line
Colori e Macro
Introduzione I/O
Porta Parallela


AppuntiAsm-386.html
Linux ELF Howto
Linux Assembly Howto
Il linguaggio PC Assembly
Assembly di Paul A.Carter
Assembly di Claudio Daffra



Amare è ritrovare la propria anima attraverso l'anima dell'amato.
Masters

Valid CSS!
pagina generata in 0.001 secondi