Come molti di voi probabilmente sanno, le memorie hardware (indirizzabili in byte) possono essere divise in due categorie: little-endian e big-endian . Nelle memorie little-endian i byte sono numerati a partire da 0 all'estremità piccola (meno significativa) e in quelli big-end al contrario.
Curiosità : questi termini si basano sul libro di Jonathan Swift , Gulliver's Travels, in cui il re lillipuziano ordinò ai suoi cittadini di rompere le uova nel piccolo (quindi i piccoli endiani) e che i ribelli avrebbero rotto il loro nel grande.
Come funziona lo scambio
Supponiamo di avere un numero intero senza segno (32 bit) 12648430
in memoria, in una macchina big-endian che potrebbe apparire come segue:
addr: 0 1 2 3
memory: 00 C0 FF EE
Invertendo l'ordine dei byte otteniamo il numero intero esadecimale 0xEEFFC000
che è 4009738240
in decimale.
Il tuo compito
Scrivi un programma / funzione che riceve un numero intero a 32 bit senza segno in decimale e genera l'intero risultante quando si scambia l'endianness come descritto sopra.
Regole
- Ingresso sarà sempre nel range
0
di4294967295
- L'output può essere stampato su STDOUT (le nuove righe / spazi finali vanno bene) o restituite
- Ingresso e uscita sono in decimali
- Il comportamento sull'input non valido non viene definito
Casi test
0 -> 0
1 -> 16777216
42 -> 704643072
128 -> 2147483648
12648430 -> 4009738240
16885952 -> 3232235777
704643072 -> 42
3735928559 -> 4022250974
4009738240 -> 12648430
4026531839 -> 4294967279
4294967295 -> 4294967295
42
è dato in decimale ma tecnicamente è in binario in C per esempio. Ovviamente puoi digitare 0x2a
, quello che volevo impedire è prendere l'input come una stringa simile "2a"
o simile.