Quando un dato necessita di più bytes per essere rappresentato, nel
salvarlo in memoria ci si trova di fronte a due alternative:
- mettere per primo il byte più significativo
- mettere per primo il byte meno significativo
Solitamente noi scriviamo a partire da sinistra verso destra, sia parole
che numeri.
In tal caso il numero inizia dalla cifra di peso maggiore:
1234
indica che 1 è cifra delle migliaia e 4 cifra delle unità.
Non ci
verrebbe certo in mente di scrivere milleduecentotrentaquattro come 4321 !
Ma dobbiamo pensare che altre culture, ad esempio quella araba, trovano
normale scrivere invece da destra a sinistra.
E, in effetti, situazioni in cui c'è una certa "eterogeneità"
nella direzione della scrittura non sono poi tanto rare.
Così, quando elenchiamo i bit all' interno di un byte partiamo dal più
alto a sinistra nella prima posizione:
Posizione nel byte |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Nome del bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
che, però, è il bit 7.
Altro esempio è il modo di riportare le date:
- gg/mm/aa in uso in Italia
- aa/mm/gg di ISO8601
Ne possono derivare problemi di comprensione, sopratutto nello scambio di
informazioni e, di conseguenza, sono state stabilite delle convenzioni, chiamate endianness.
Esse si dividono in due gruppi:
Così, ad esempio, il numero esadecimale a 32 bit 0x12345678 sarà
immagazzinato in memoria nella forma:
locazione memoria |
0 |
1 |
2 |
3 |
Contenuto |
big endian |
12h |
34h |
56h |
78h |
little endian |
78h |
56h |
34h |
12h |
Ovvero, la forma big-endian pone come primo elemento quello
di peso maggiore, analogamente alla scrittura corrente.
La forma little-endian inizia invece con il byte di peso minore.
Si utilizza una architettura big-endian nei micro 68000 di Motorola
e negli Sparc e in Internet.
Utilizzano una architettura little-endian i 6500 di MOS
Technology e x86 di Intel, come pure i file BMP
Il formato HEX di Intel per i file esadecimali (ad esempio per la
programmazione dei PIC) impiega un little endian a coppie di bytes, come
pure l' allocazione dei byte che compongono una istruzione in memoria inizia
con il byte basso.
Se in generale endianness è relativa a byte, se ne può parlare anche a livello di bit nei dispositivi seriali a seconda che sia emesso prima il bit 7 o il bit 0.
Endianness ha serie implicazioni per quanto riguarda la portabilità
del software in quanto l' inversione dell' allocazione dei bytes impedisce il
regolare funzionamento di routines matematiche o di visualizzazione.Quale
dei due è migliore?
I numeri espressi in big endian sono più facilmente leggibili, in
quanto ricalcano la disposizione delle cifre che utilizzano nella scrittura.
Dal punto di vista logico la cosa è meno semplice, poichè in big endian
il numero maggiore occupa la locazione minore. E viceversa per il little
endian. Così little endian è più pratico nel trattare i
numeri: se un valore numerico cresce, memorizzato in little endian i byte meno
significativi restano nelle loro locazioni, mentre nuove cifre saranno
aggiunte a destra, ad indirizzi successivi, il che semplifica alcune alcune
operazioni del computer. Per contro, in big endian l' aumento delle cifre
avviene a sinistra e richiede uno spostamento di tutto il numero verso destra, in quanto
le cifre più significative stanno all' inizio.
Ma leggere i numeri "al
contrario" è assai poco naturale e richiede un certo sforzo mentale per
un occidentale (mentre ad esempio gli arabi scrivono da destra a sinistra).
Ne nascono così discussioni anche accese a favore dell' uno o dell' altro
metodo. Però, una volta realizzate routines adeguate per trattare queste
convenzioni, il problema è del tutto irrilevante.
E, in effetti, il nome "endian" deriva dal racconto di J.Swift
sui viaggi di Gulliver, dove il protagonista incontra due fazioni in
guerra tra loro sull ' "importante" problema di come rompere le
uova. A Lilliput, il partito del re rendeva obbligatorio aprirlo da quella
più grande, da cui il nome della fazione Big Endians. A Blefuscu, per
protesta contro il re, si apriva l' uovo dall' estremità opposta, da cui il
nome di Little Endians.
Swift usa questa parabola per stigmatizzare come un comportamento
del tutto irrilevante ed equivalente diventi nelle società umane causa di
conflitti sanguinosi.
Lo stesso Endian è un gioco di parole tra end (end-ian è traducibile come
finiano, estremitano, in relazione all' apertura delle uova) e l' assonanza
con Indian,
popolo di una lontana terra esotica.
|