Tips & Trick - Informatica

 

 

Endianness


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:

  • big-endian
  • little-endian

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. 


 

Copyright © afg . Tutti i diritti riservati.
Aggiornato il 09/05/11 .