Como la mayoría de ustedes probablemente saben, las memorias de hardware (direccionables por byte) se pueden dividir en dos categorías: little-endian y big-endian . En las memorias little-endian los bytes están numerados comenzando con 0 en el extremo pequeño (menos significativo) y en los big-endian al revés.
Dato curioso : estos términos se basan en el libro de Jonathan Swift , Gulliver's Travels, donde el rey liliputiense ordenó a sus ciudadanos que rompieran sus huevos en el pequeño extremo (por lo tanto, los pequeños endianos) y los rebeldes romperían los suyos en el gran extremo.
Cómo funciona el intercambio
Supongamos que tenemos un entero sin signo (32 bits) 12648430
en la memoria, en una máquina big-endian que podría tener el siguiente aspecto:
addr: 0 1 2 3
memory: 00 C0 FF EE
Al invertir el orden de bytes, obtenemos el entero hexadecimal 0xEEFFC000
que está 4009738240
en decimal.
Tu tarea
Escriba un programa / función que reciba un entero de 32 bits sin signo en decimal y genere el entero resultante al intercambiar el endianness como se describió anteriormente.
Reglas
- La entrada siempre estará en el rango
0
de4294967295
- La salida puede imprimirse en STDOUT (las líneas / espacios finales están bien) o devolverse
- La entrada y la salida están en decimal.
- El comportamiento en la entrada inválida se deja sin definir
Casos de prueba
0 -> 0
1 -> 16777216
42 -> 704643072
128 -> 2147483648
12648430 -> 4009738240
16885952 -> 3232235777
704643072 -> 42
3735928559 -> 4022250974
4009738240 -> 12648430
4026531839 -> 4294967279
4294967295 -> 4294967295
42
se da en decimal pero técnicamente está en binario en C, por ejemplo. Por supuesto 0x2a
, puede escribir , lo que quería evitar es tomar la entrada como una cadena como "2a"
o similar.