Considere que 0xABCD, 0b1011_1010_1100_0001 e 0b0100010100111110 estão armazenados em big-endian. Como é sua representação em little-endian?
(a) 0xB3D5, 0b1000_0011_0101_1101 e 0b0111110010100010
(b) 0 xCDAB, Ob1100_0001_1011_1010 e 0b0011111001000101
(c) 0xDCBA, 0b0001_1100_1010_1011 e 0b1110001101010100

Passo 1

O enunciado dá três valores de 16 bits armazenados em big-endian e pede a representação desses mesmos 16 bits em little-endian. Os valores dados são:
\;0xABCD\;,
\;0b1011\_1010\_1100\_0001\; e
\;0b0100010100111110\;.
Queremos descobrir como ficam esses mesmos bytes quando a ordem for little-endian (ou seja, quando os bytes forem invertidos). As alternativas são (a), (b) e (c) fornecidas pelo enunciado.

Passo 2

Conceito essencial (explicação didática): o que significa big-endian e little-endian?
  • Um valor de 16 bits é formado por 2 bytes (cada byte tem 8 bits).
  • Em big-endian o byte mais significativo (MSB, “mais importante”) vem primeiro na memória; em little-endian o byte menos significativo (LSB) vem primeiro.
  • Para converter a representação entre big-endian e little-endian em um valor de 16 bits basta trocar a ordem dos dois bytes.
    Exemplo simples: se os bytes são B_1 e B_2 (onde B_1 é o byte alto e B_2 o byte baixo), big-endian armazena B_1\;B_2 e little-endian armazena B_2\;B_1.

Passo 3

Como identificar bytes em cada formato:
  • Em hexadecimal cada dois dígitos representam um byte. Ex.: em \;0xABCD\; o byte alto é \;0xAB\; e o byte baixo é \;0xCD\;.
  • Em binário separe em grupos de 8 bits: por exemplo \;10111010\;11000001\; tem primeiro byte \;10111010\; e segundo \;11000001\;.
    Agora aplicamos a regra de inversão de bytes para cada número.

Passo 4

Primeiro número: \;0xABCD\;.
  • Separe em bytes: byte alto \;0xAB\; e byte baixo \;0xCD\;.
  • Inverta a ordem: \;0xCD\; seguido de \;0xAB\;.
  • Resultado little-endian (escrito em hex como número com bytes trocados): \;0xCDAB\;.

Passo 5

Segundo número: \;0b1011\_1010\_1100\_0001\;.
  • Removendo os underscores para ver claramente: \;0b1011101011000001\;.
  • Separe em bytes de 8 bits:
    • byte alto: \;10111010\;,
    • byte baixo: \;11000001\;.
  • Inverta a ordem dos bytes: primeiro \;11000001\;, depois \;10111010\;.
  • Juntando: \;0b1100\_0001\_1011\_1010\; (ou sem underscores \;0b1100000110111010\;).
  • Esse é o resultado little-endian em binário.

Passo 6

Terceiro número: \;0b0100010100111110\;.
  • Separe em bytes de 8 bits:
    • byte alto: \;01000101\; (que é \;0x45\;),
    • byte baixo: \;00111110\; (que é \;0x3E\;).
  • Inverta a ordem: primeiro \;00111110\;, depois \;01000101\;.
  • Juntando: \;0b0011\_1110\_0100\_0101\; (ou sem underscores \;0b0011111001000101\;).
  • Esse é o resultado little-endian em binário.

Passo 7

Comparando os resultados obtidos com as alternativas:
  • Para \;0xABCD\; obtivemos \;0xCDAB\;.
  • Para \;0b1011\_1010\_1100\_0001\; obtivemos \;0b1100\_0001\_1011\_1010\;.
  • Para \;0b0100010100111110\; obtivemos \;0b0011111001000101\;.
    Esses três resultados correspondem exatamente à alternativa (b).

Resposta

(b)

Exercícios relacionados