C'è qualche trucco pratico per ricordare la differenza tra big-endian e little-endian?


13

Non lavoro tutti i giorni con problemi big-endian e little-endian e quindi trovo molto difficile ricordare quale sia cosa.

Recentemente ho ricevuto un'intervista che chiedeva la differenza tra i due; dato che non ricordavo di aver deciso di "indovinare" (50% di possibilità, dopo tutto) ma non ci sono riuscito.

Quindi, c'è qualche trucco pratico ampiamente noto per ricordare qual è la differenza tra big endian e little endian?


10
Però, stai meglio affermando cos'è l'endianità e dicendo che non riesci mai a ricordare in che direzione è, quindi vai sempre su Google
jk.

Anch'io ho problemi a ricordarlo e ci sono troppi trucchi mnemotecnici confusi. Il mio unico aiuto affidabile è lanciare l' incantesimo di endianness su google in modo da ottenere l' articolo di Wikipedia .
mouviciel,

3
Divertente coincidenza - Mi sono imbattuto in questo link solo oggi, ed è sorprendentemente rilevante commandcenter.blogspot.com/2012/04/byte-order-fallacy.html
Nevermind

@Nevermind Ho smesso di leggere quell'articolo dopo il secondo paragrafo. "Di interesse solo per gli autori di compilatori e per le persone che hanno a che fare con la memoria mappata sui registri"? Oltre al fatto che questa è una terribile frase del percorso del giardino , implica che il codice che si occupa dei registri è un caso limite. Prova a utilizzare un computer prima o poi senza i driver di dispositivo.
dodgethesteamroller,

Risposte:


14

Ho sempre pensato che fosse definito nel modo sbagliato, e questo è anche il consiglio per ricordarlo. Come un madrelingua inglese, vedo "fine" come l'opposto di "inizio" (anche se ovviamente "fine" può significare una delle due estremità: la fine dell'inizio o la fine). Ad ogni modo, ricordo solo che "è definito nel modo sbagliato" :)

  • In big endian , il byte più significativo (più grande) è all'inizio .
  • In little endian , il byte meno significativo (il più piccolo) è all'inizio .

Oppure, riferendosi al bit endianness :

  • 128 64 32 16 8 4 2 1 è big endian, perché finisce con il piccolo.
  • 1 2 4 8 16 32 64 128 è little endian, perché finisce con il big.

Anche se l'uso abituale della parola endianness si riferisce a come i byte sono ordinati all'interno di una parola, il suo significato generico si riferisce all'ordinamento di sottocomponenti indirizzabili individualmente all'interno della rappresentazione di un elemento di dati più grande ( come spiegato in Wikipedia ).


5
ahh, ma i lillipuziani little-endian hanno iniziato (incrinato) le loro uova alla fine piccola quindi è la strada giusta intorno
jk.

4
-1: Endian-ness si riferisce ai byte all'interno di una parola, non ai bit all'interno di un byte.
kdgregory,

1
@kdgregory - Alla fine, la numerazione dei bit è influenzata da una parola. Hai provato le strutture bit-field attraverso diversi endian? Sono d'accordo che la risposta ha sbagliato, però.
mouviciel,

@Kdgregory: Secondo Wikipedia , l' endianness si riferisce all'ordinamento di sottocomponenti indirizzabili individualmente all'interno della rappresentazione di un elemento di dati più grande. Questo è il caso generico. C'è anche una nozione di bit endianness . Hai ragione nel dire che l' uso più comune di endianness si riferisce a come i byte sono ordinati all'interno di una parola, e i miei esempi, certamente, non lo riflettono. Sostituito il primo esempio con il caso comune.
Joonas Pulakka,

2
@kdgregory: Da quando è richiesta l'esistenza dell'hardware per giustificare le nozioni teoriche di CS? Ma molto bene: 8051 ha registri indirizzabili a bit. Il linguaggio Ada consente di specificare l'ordine di bit appropriato per la rappresentazione del tipo di dati ( pdf ). L'ordine di trasmissione dei bit su un supporto seriale ovviamente deve definire l'endianità dei bit. Il fatto che l' uso abituale di "endianness" si riferisca a un caso speciale (byte in parole) non invalida il suo significato generico.
Joonas Pulakka,

33

Il mio consiglio:

  • big endian = big-end prima! (il primo byte (indirizzo più basso) è l'MSB)
  • little endian = piccola fine prima! (il primo byte (indirizzo più basso) è l'LSB)

3
Sì, questo è il modo in cui penso: Big Endian "Inizia alla fine GRANDE", mentre Little Endian "Inizia alla fine Piccola". È come una mazza da baseball, ci sono due estremità della mazza, una è grande, l'altra è piccola. Non è proprio un concetto così difficile.
Shane Kilkelly,

6

Il modo migliore per ricordare questo è che i popoli civili cercano varietà e quindi mangiano le loro uova in modo diverso da come ordinano il loro numero. Mentre scriviamo prima cifre decimali iniziando dalle cifre grandi (big endian), mangiamo uova sode dalla fine piccola (little endian).


1
Questa risposta è per lo più non tecnica, tuttavia è stata completamente accurata e mi ha fatto ridere. Buon lavoro.

6

I numeri big-endian iniziano al "big end". I numeri little-endian iniziano alla "piccola fine".

Entrambi sono un'allusione al problema di dove iniziare a mangiare il tuo uovo, secondo Gulliver's Travels.

In questo caso, "end" non è l'opposto di start, significa solo un estremo di una sequenza (corda | stringa | numero |), quindi non vengono chiamati "big finishian" o "little finishian" (che sarebbe sicuramente l'opposto di "start").


Infatti. E il modo più semplice (e più divertente) di ricordare è andare a leggere i Viaggi di Gulliver. Ti garantisco che non dimenticherai mai quale è quale!
Jules,

Dovresti mettere "inizia a mangiare" in grassetto (anche 72pt, <blink>), questo è davvero il motivo di tutta la confusione qui.
T Nierath,

2

Il modo più semplice per me di ricordare è cambiare la parola "endian" in "startian". Gli interi di grande startian iniziano con il grande (per esempio, i byte più significativi vengono prima) e gli interi di piccoli start iniziano con il piccolo (ad esempio, i byte meno significativi vengono per primi).


Sentiti libero di pronunciare startian come /'stɑːr.ʃən/ o /'stɑːr.ti.ən/ (ometti il ​​/ r / per gli accenti non rotici)
dreamlax

Questo è abbastanza intelligente e facile da ricordare.
Coldblackice,

1

Non riuscivo mai a ricordare quale fosse "big-endian" e quale "little-endian" ma conoscevo l'endianness dei processori PowerPC e Intel x86. Poco ha la maggior parte delle lettere in comune con Intel, quindi Intel x86 è little-endian.

Ovviamente è utile solo se conosci l'ordine dei byte di PPC e x86. D'altra parte, ora dovresti ricordare che Intel x86 = little-endian. E ricorda che x86 e ARM sono molto, molto compatibili anche con set di istruzioni totalmente diversi.


1

La metterei così: Big is beautiful!

Grande == bello == giusto.
L'endianità giusta è quella che puoi leggere in un hexdump, che è quella che mette per primo il byte più significativo, come fa qualsiasi essere umano sano di mente.

Poco == brutto == sbagliato.
I dump esadecimali prodotti da questa endianess sono semplicemente talmente sbagliati che scappi urlando "Brains!". Forse questa è una specie di abominio alieno, possiamo solo speculare sull'origine di questa atrocità. Tuttavia, esiste e ne siamo bloccati.

Pitty, non è sempre la migliore variante che rende la gara ...


Little == ugly == wrong... "Anche la persona più piccola può cambiare il corso del futuro" -Galadrial, LOTR
Coldblackice

-1

In big endian: (ordine crescente)

Da basso ad alto, ad es

0 | 1 | 2 | 3 ^ ^ Inizio Fine

In little-Endian: (Ordine decrescente)

Dall'alto al basso

vale a dire

3 | 2 | 1 | 0 ^ ^ Inizio Fine


1
La domanda richiedeva un trucco pratico per ricordare quale.
gnasher729,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.