Existe algum truque prático para lembrar a diferença entre big endian e little endian?

13

Não trabalho todos os dias com problemas de big endian e little endian e, portanto, acho muito difícil lembrar qual é o quê.

Recentemente, recebi uma entrevista perguntando a diferença entre os dois; como não me lembrava, decidi "adivinhar" (50% de chance, afinal), mas falhei.

Então, existe algum truque prático conhecido para lembrar qual é a diferença entre big endian e little endian?

Emiliano
fonte
10
Eu acho que é melhor você dizer o que é endianess e dizer que você nunca consegue se lembrar de que lado é, para que você sempre pesquise no google
jk.
Eu também tenho problemas para lembrar e existem muitos truques mnemotécnicos confusos. Minha única ajuda confiável é lançar o feitiço endianness no google para que eu receba o artigo da Wikipedia .
Mouviciel 4/04/12
3
Engraçado coincidência - Eu só tropeçou neste link hoje, e é surpreendentemente relevante commandcenter.blogspot.com/2012/04/byte-order-fallacy.html
o Nevermind
@ Nevermind, parei de ler esse artigo após o segundo parágrafo. "De interesse apenas para escritores de compiladores e pessoas que precisam lidar com a memória mapeada para registros"? Além do fato de ser uma péssima sentença no caminho do jardim , isso implica que o código que lida com os registros é um caso extremo. Tente usar um computador em algum momento sem drivers de dispositivo.
Dodgethesteamroller

Respostas:

14

Eu sempre pensei que ele definiu o caminho errado, e essa também é a dica para lembrar. Como falante de inglês não nativo, vejo "fim" como o oposto de "começo" (embora obviamente "fim" possa significar um fim - o fim do começo ou o fim do fim). Enfim, eu só lembro que "está definido da maneira errada" :)

  • No big endian , o byte mais significativo (maior) está no início .
  • Em little endian , o byte menos significativo (menor) está no início .

Ou, referindo-se à persistência de bits :

  • 128 64 32 16 8 4 2 1 é big endian, porque termina com pouco.
  • 1 2 4 8 16 32 64 128 é pouco endian, porque termina no grande.

Embora o uso usual da palavra endianness se refira a como os bytes são ordenados dentro de uma palavra, seu significado genérico se refere à ordem de subcomponentes endereçáveis ​​individualmente na representação de um item de dados maior ( conforme explicado na Wikipedia ).

Joonas Pulakka
fonte
5
ahh, mas os liliputianos little-endianos começaram (quebraram) seus ovos no finalzinho, então é o caminho certo
jk.
4
-1: Endianismo refere-se a bytes dentro de uma palavra, não a bits dentro de um byte.
precisa
1
@kdgregory - No final, a numeração de bits é afetada em uma palavra. Você já tentou estruturas de campo de bits em diferentes endianos? Concordo que a resposta está errada, no entanto.
Mouviciel 4/04/12
@ Kdgregory: De acordo com a Wikipedia , endianness refere-se à ordem de subcomponentes endereçáveis ​​individualmente na representação de um item de dados maior. Esse é o caso genérico. Há também uma noção de endianness pouco . Você está certo quanto ao fato de que o uso mais comum de endianness se refere a como os bytes são ordenados em uma palavra, e meus exemplos reconhecidamente não refletem isso. Substituiu o primeiro exemplo pelo caso comum.
Joonas Pulakka 04/04/12
2
@kdgregory: Desde quando é necessária a existência de hardware para justificar noções teóricas de CS? Mas muito bem: o 8051 possui registros endereçáveis ​​por bits. A linguagem Ada permite especificar a ordem de bits apropriada para a representação do tipo de dados ( pdf ). A ordem de transmissão dos bits por um meio serial, é claro, precisa definir a endianidade dos bits. O fato de o uso usual de "endianness" se referir a um caso especial (bytes em palavras) não invalida seu significado genérico.
Joonas Pulakka
33

Minha própria dica:

  • big endian = big-end primeiro! (o primeiro byte (endereço mais baixo) é o MSB)
  • little endian = pequeno final primeiro! (o primeiro byte (endereço mais baixo) é o LSB)
KB99
fonte
3
Sim, é assim que penso: Big Endian "Começa no final GRANDE", enquanto Little Endian "Começa no final final". É como um taco de beisebol, existem duas pontas do taco, uma é grande e a outra é pequena. Realmente não é tão difícil de conceito.
precisa saber é o seguinte
6

A melhor maneira de lembrar isso é que os povos civilizados buscam variedade e, portanto, comem seus ovos de maneira diferente do que ordenam seus números. Enquanto escrevemos dígitos decimais começando pelos dígitos grandes primeiro (big endian), comemos ovos cozidos desde o final pequeno (little endian).

Andrey Fedorov
fonte
1
Essa resposta é principalmente não técnica, mas foi completamente precisa e me fez rir. Bom trabalho.
6

Os números do big endian começam no "big end". Os números little-endianos começam no "finalzinho".

Ambos são uma alusão à questão de por onde começar a comer seu ovo, conforme as Viagens de Gulliver.

Nesse caso, "end" não é o oposto de start, significa apenas qualquer extremo de uma (corda | corda | número | sequência), portanto eles não são chamados de "grande finalista" ou "pequeno finalista" (o que definitivamente seria o oposto de "iniciar").

Vatine
fonte
De fato. E a maneira mais fácil (e mais divertida) de lembrar é ler as Viagens de Gulliver. Eu garanto que você nunca esquecerá qual é qual novamente!
Jules
Você deve colocar "começar a comer" em negrito (também 72 pontos), esse é realmente o motivo de toda a confusão aqui.
T Nierath 22/10/19
2

A maneira mais fácil de me lembrar é mudar a palavra "endian" para "startian". Inteiros grandes iniciantes começam com o grande final (por exemplo, os bytes mais significativos vêm em primeiro lugar), e inteiros pequenos iniciantes começam com o pequeno final (por exemplo, os bytes menos significativos vêm primeiro).

dreamlax
fonte
Duvide pronunciar startian como /'stɑːr.ʃən/ ou /'stɑːr.ti.ən/ (omitir o / r / para acentos não-rótico)
dreamlax
Isso é bastante inteligente e fácil de lembrar.
Coldblackice
1

Eu nunca conseguia lembrar o que é "big-endian" e o que é "little-endian", mas sabia o endianness dos processadores PowerPC e Intel x86. Pouco tem a maioria das letras em comum com a Intel; portanto, o Intel x86 é um pouco endian.

Claro que isso só é útil se você souber a ordem dos bytes do PPC e do x86. Por outro lado, você deve se lembrar agora de que Intel x86 = little-endian. E lembre-se de que o x86 e o ​​ARM são muito, muito compatíveis, mesmo com conjuntos de instruções totalmente diferentes.

gnasher729
fonte
1

Eu colocaria desta maneira: grande é lindo!

Big == bonito == certo.
A endianess certa é aquela que você pode ler em um hexdump, que é o que coloca o byte mais significativo em primeiro lugar, como qualquer ser humano.

Pouco == feio == errado.
Os hexdumps produzidos por essa endianess são tão errados que você foge gritando "Brains!". Talvez seja algum tipo de abominação alienígena, só podemos especular sobre a origem dessa atrocidade. No entanto, existe, e estamos presos a ela.

Pitty, nem sempre é a melhor variante que faz a corrida ...

cmaster - restabelece monica
fonte
Little == ugly == wrong... "Mesmo a pessoa menor pode mudar o rumo do futuro" -Galadrial, LOTR #
Coldblackice
-1

Em big endian: (ordem crescente)

Baixo para alto, ie

0 1 | 2 3 ^ ^ Fim do início

Em little-Endian: (Ordem decrescente)

Decrescente

ie

3 2 1 | 0 ^ ^ Início Fim

user222896
fonte
1
A pergunta pedia um truque prático para lembrar qual.
precisa saber é o seguinte