Jak zapewne większość z was wie, pamięć sprzętową (adresowalną bajtowo) można podzielić na dwie kategorie - little-endian i big-endian . W pamięciach little-endian bajty są ponumerowane zaczynając od 0 na małym (najmniej znaczącym) końcu, a w big-endian na odwrót.
Ciekawostka : Warunki te oparte są na książce Jonathana Swifta Podróż Guliwera, w której król Lilliputian nakazał swoim obywatelom rozbić jaja na małym końcu (a więc na małych endianach), a rebelianci rozbili ich na wielkim końcu.
Jak działa zamiana
Załóżmy, że mamy 12648430
w pamięci liczbę całkowitą bez znaku (32-bitową) w maszynie typu big-endian, która może wyglądać następująco:
addr: 0 1 2 3
memory: 00 C0 FF EE
Odwracając kolejność bajtów, otrzymujemy liczbę szesnastkową, 0xEEFFC000
która jest 4009738240
dziesiętna.
Twoje zadanie
Napisz program / funkcję, która odbiera 32-bitową liczbę całkowitą bez znaku w systemie dziesiętnym i wyświetla wynikową liczbę całkowitą podczas zamiany endianizmu, jak opisano powyżej.
Zasady
- Dane wejściowe zawsze będą w zakresie
0
do4294967295
- Dane wyjściowe można wydrukować do STDOUT (końcowe znaki nowej linii / spacje są w porządku) lub zwrócić
- Dane wejściowe i wyjściowe są dziesiętne
- Zachowanie w przypadku nieprawidłowych danych wejściowych pozostaje niezdefiniowane
Przypadki testowe
0 -> 0
1 -> 16777216
42 -> 704643072
128 -> 2147483648
12648430 -> 4009738240
16885952 -> 3232235777
704643072 -> 42
3735928559 -> 4022250974
4009738240 -> 12648430
4026531839 -> 4294967279
4294967295 -> 4294967295
42
jest podawany w postaci dziesiętnej, ale technicznie jest on na przykład dwójkowy w C. Możesz oczywiście wpisać 0x2a
, co chciałem zapobiec, biorąc dane wejściowe jako ciąg znaków "2a"
lub podobny.