Pelo que pesquisei, o Little Endian armazena o byte menos significativo no menor endereço de memória, enquanto o Big Endian armazena o byte mais significativo no menor endereço de memória.
No entanto, não entendo como calcular e comparar os bytes significativos.
Por exemplo, a partir destesite, a imagem abaixo mostra como os 4 bytes, 90, AB, 12, CD são armazenados em endereços de memória no formato Little Endian.
Como posso comparar qual byte é maior entre os 4? Converti tudo em valores hexadecimais primeiro e depois comparei com base em seus valores decimais, mas não parece funcionar dessa maneira.
205> 18, porém o CD está armazenado no menor endereço de memória.. então.. estou errado.
Qualquer esclarecimento é apreciado.
Treating CD as a hex value, with a decimal value of 205.
Treating 12 as a hex value, with a decimal value of 18.
Treating AB as a hex value, with a decimal value of 171.
Treating 90 as a hex value, with a decimal value of 144.
Responder1
Acho que a página da web ao qual você vincula contém uma descrição muito confusa de endianness!
O valor real dos bytes individuais na palavra não tem relevância sobre onde eles estão armazenados na memória, apenas a sua posição como parte de toda a palavra de 4 bytes.
Endianness se aplica apenas a palavras de vários bytes. No seu caso, você tem uma palavra de 4 bytes da seguinte forma:
Decimal Hex Binary
2427130573 90 AB 12 CD 10010000 10101011 00010010 11001101
Esta é a representação big-endian, onde o byte mais significativo ( 0x90
) é armazenado primeiro na memória, ou no endereço de memória mais baixo.
Na representação little-endian, os bytes são simplesmente invertidos na memória da seguinte forma:
Decimal Hex Binary
2427130573 CD 12 AB 90 11001101 00010010 10101011 10010000
Agora o byte menos significativo ( 0xCD
) é armazenado primeiro na memória ou no endereço de memória mais baixo.
Você vê que os valores reais dos bytes envolvidos não determinam sua localização na memória, apenas sua posição na palavra inteira.
O conceito de endianness remonta à arquitetura da CPU, conforme descrito no artigo ao qual você vincula, e há vantagens e desvantagens em ambos os métodos.
A maneira mais natural para os humanos pensarem nos números é em termos de big endian, porque é assim que tratamos os números decimais. No seu caso, 2427130573
pode-se dizer que o número decimal está escrito em notação big-endian, ou seja, o dígito mais significativo ( 2
) é escrito primeiro com significância diminuindo à medida que você vai para a direita (ou seja, alterar o valor do dígito mais à esquerda tem maior significado no valor do número). O número também pode ser escrito da esquerda para a direita, 3750317242
com o dígito menos significativo primeiro, desde que você saiba lê-lo dessa maneira (EDIT: aliás, é por isso que os arquivos unicode devem ter uma marca de ordem de byte (BOM) armazenada nos primeiros 2 bytes do arquivo para que o sistema operacional saiba como interpretar o arquivo.)
No entanto, para que os computadores realizem cálculos, muitas vezes é mais eficiente ter o byte menos significativo armazenado primeiro. Acho que os argumentos para endianismo grande versus pequeno são um tópico para outra discussão e há muitas fontes para isso online!
Espero que isso ajude a esclarecer um pouco!