Seperti yang mungkin Anda ketahui, memori perangkat keras (byte-addressable) dapat dibagi menjadi dua kategori - little-endian dan big-endian . Dalam ingatan little-endian byte-byte diberi nomor dimulai dengan 0 pada akhir yang sedikit (paling tidak signifikan) dan pada yang big-endian sebaliknya.
Fakta menyenangkan : Istilah-istilah ini didasarkan pada buku Jonathan Swift , Gulliver's Travels di mana raja Lilliputian memerintahkan warganya untuk memecahkan telur mereka di ujung kecil (dengan demikian si kecil-endian) dan para pemberontak akan memecahkannya di ujung besar.
Bagaimana swapping bekerja
Misalkan kita memiliki integer unsigned (32bit) 12648430
dalam memori, dalam mesin big-endian yang mungkin terlihat sebagai berikut:
addr: 0 1 2 3
memory: 00 C0 FF EE
Dengan membalik urutan byte kita mendapatkan integer heksadesimal 0xEEFFC000
yang 4009738240
dalam desimal.
Tugas Anda
Tulis program / fungsi yang menerima bilangan bulat 32-bit yang tidak ditandatangani dalam desimal dan mengeluarkan bilangan bulat yang dihasilkan ketika menukar endianness seperti dijelaskan di atas.
Aturan
- Input akan selalu dalam kisaran
0
hingga4294967295
- Output dapat dicetak ke STDOUT (mengikuti baris / spasi baik-baik saja) atau dikembalikan
- Input dan output dalam desimal
- Perilaku pada input yang tidak valid dibiarkan tidak terdefinisi
Uji kasus
0 -> 0
1 -> 16777216
42 -> 704643072
128 -> 2147483648
12648430 -> 4009738240
16885952 -> 3232235777
704643072 -> 42
3735928559 -> 4022250974
4009738240 -> 12648430
4026531839 -> 4294967279
4294967295 -> 4294967295
42
diberikan dalam desimal tetapi secara teknis itu dalam biner dalam C misalnya. Anda tentu saja dapat mengetik 0x2a
, apa yang ingin saya cegah adalah mengambil input sebagai string suka "2a"
atau sejenisnya.