Cos’è Endianness?

Endianness è la funzione di un sistema che dettaglia la rappresentazione di interi. Ordina il modo in cui appaiono i numeri. Proprio come una lingua parlata, i numeri interi come parte dei codici devono essere tradotti su carta. Mentre alcune culture leggono da destra a sinistra e alcune leggono da sinistra a destra, i numeri nei codici possono anche essere disposti da destra a sinistra o da sinistra a destra.

La memoria di un sistema contiene byte e ogni posizione nel sistema memorizza un elemento della memoria. Questi elementi sono solitamente byte, sebbene alcuni sistemi memorizzino bit. Una parola o un numero intero si traduce in 32 bit o quattro byte. Poiché ogni indirizzo di memoria può memorizzare solo un byte, non quattro, l’intero deve essere suddiviso in singoli byte, ognuno dei quali utilizza due cifre per rappresentare il valore di quel byte.

Il termine endianness deriva dal libro I viaggi di Gulliver di Jonathan Swift, dove descrive in modo ironico le differenze tra il modo in cui le persone mangiano le uova sode, sia dall’estremità grande che da quella piccola. Quindi, l’endianness è disponibile in due varietà: big endian e little endian. Una disposizione big endian prende un numero intero composto da più byte e posiziona il più significativo di questi byte a sinistra. Il byte più significativo è memorizzato nell’indirizzo più piccolo. Questo tipo di ordinamento dei byte è facile da comprendere per coloro che parlano lingue come l’inglese, dove il testo viene letto da sinistra a destra.

Una disposizione little endian è quella in cui il byte più importante in un intero multibyte sarà a destra. Qui, il byte meno significativo è memorizzato nell’indirizzo più piccolo. Ciò consente una lettura da destra a sinistra, come l’ebraico e l’arabo. Per mantenere l’ordine dei byte in ordine, ricorda che quando il byte meno significativo (LSB) viene memorizzato per primo, si chiama little endian. Quando il byte più significativo (MSB) viene memorizzato per primo, viene chiamato big endian.

Tutti i sistemi sono big o little endian e alcuni hanno un bit di registro, che consente all’utente di scegliere l’endian preferito. Quando si memorizzano numeri interi in un file di sistema, il file potrebbe essere inviato a una macchina che utilizza l’altro tipo di endianness. I numeri sarebbero arretrati e il messaggio non avrebbe alcun senso. In genere, quando non è chiaro quale endianness utilizzare, entra in gioco qualcosa chiamato network byte order. Con questo, gli interi vengono inviati in gruppi di quattro byte di big o little endianness, scelti a caso, e la macchina che riceve gli interi può invertire i byte se le endianness non corrispondono.

Endianness viene utilizzato solo quando si rompe qualcosa di grande valore, come una parola, in parti più piccole. Viene quindi formato un ordine in cui memorizzare queste parti nella memoria di sistema. Non viene utilizzato quando si memorizza un valore in un registro che può contenerlo tutto. In questo caso, tutti i bit, destro e sinistro, sono ugualmente importanti.