Adakah trik praktis untuk mengingat perbedaan antara big-endian dan little-endian?

13

Saya tidak bekerja setiap hari dengan masalah big-endian dan little-endian dan karenanya saya sulit mengingat yang mana.

Baru-baru ini saya mendapat wawancara menanyakan perbedaan antara keduanya; karena saya tidak ingat saya memutuskan untuk "menebak" (kesempatan 50%, setelah semua) tetapi saya gagal.

Jadi, adakah trik praktis yang dikenal luas untuk mengingat apa perbedaan antara big endian dan little endian?

Emiliano
sumber
10
Saya pikir Anda lebih baik menyatakan apa itu endianess dan mengatakan Anda tidak akan pernah bisa mengingatnya sehingga Anda selalu mencari di google
jk.
Saya juga memiliki masalah dalam mengingatnya dan ada banyak trik mnemotechnic yang membingungkan. Satu-satunya bantuan saya yang dapat diandalkan adalah untuk melemparkan mantra endianness di google sehingga saya mendapatkan artikel Wikipedia .
mouviciel
3
Kebetulan lucu - Saya hanya menemukan tautan ini hari ini, dan ini mengejutkan commandcenter.blogspot.com/2012/04/byte-order-fallacy.html
Nevermind
@Nevermind saya berhenti membaca artikel itu setelah paragraf kedua. "Yang menarik hanya untuk penulis kompilasi dan orang-orang yang harus berurusan dengan memori yang dipetakan ke register"? Selain fakta bahwa itu adalah kalimat jalur taman yang mengerikan , itu menyiratkan bahwa kode yang berhubungan dengan register adalah kasus tepi. Coba gunakan komputer kapan saja tanpa driver perangkat.
dodgethesteamroller

Jawaban:

14

Saya selalu berpikir bahwa itu didefinisikan dengan cara yang salah, dan itu juga tip untuk mengingatnya. Sebagai penutur bahasa Inggris non-pribumi, saya melihat "akhir" sebagai kebalikan dari "mulai" (meskipun jelas "akhir" dapat berarti akhir - awal, atau akhir). Lagi pula, saya hanya ingat bahwa "itu didefinisikan dengan cara yang salah" :)

  • Dalam big endian , byte (terbesar) yang paling signifikan adalah di awal .
  • Dalam little endian , byte paling signifikan (terkecil) ada di awal .

Atau, mengacu pada bit endianness :

  • 128 64 32 16 8 4 2 1 adalah big endian, karena hanya sedikit.
  • 1 2 4 8 16 32 64 128 adalah endian kecil, karena berakhir dengan besar.

Meskipun penggunaan kata endianness yang biasa mengacu pada bagaimana byte diurutkan dalam sebuah kata, makna generiknya merujuk pada pemesanan sub-komponen yang dapat dialamatkan secara individu dalam representasi item data yang lebih besar ( seperti yang dijelaskan dalam Wikipedia ).

Joonas Pulakka
sumber
5
ahh, tapi para lilliputian endian kecil memulai (meretakkan) telur mereka di ujung kecil sehingga itu adalah cara yang benar di sekeliling
jk.
4
-1: Endian-ness mengacu pada byte dalam sebuah kata, bukan bit dalam byte.
kdgregory
1
@kdgregory - Pada akhirnya, penomoran bit dipengaruhi dalam sebuah kata. Sudahkah Anda mencoba struct bit-field di berbagai endian? Saya setuju bahwa jawabannya salah.
mouviciel
@Kdgregory: Menurut Wikipedia , endianness mengacu pada pemesanan sub-komponen yang dapat dialamatkan secara individu dalam representasi item data yang lebih besar. Itu adalah kasus generik. Ada juga gagasan bit endianness . Anda benar karena penggunaan endianness yang paling umum merujuk pada bagaimana byte diurutkan dalam sebuah kata, dan contoh-contoh saya memang tidak mencerminkan hal itu. Ganti contoh pertama dengan case umum.
Joonas Pulakka
2
@ kdgregory: Sejak kapan keberadaan perangkat keras diperlukan untuk membenarkan gagasan teoretis CS? Tetapi sangat baik: 8051 memiliki register bit-addressable. Bahasa Ada memungkinkan menentukan urutan bit yang sesuai untuk representasi tipe data ( pdf ). Urutan transmisi bit melalui media serial tentu saja perlu mendefinisikan bit endianness. Fakta bahwa biasa menggunakan "endianness" mengacu pada kasus khusus (byte dalam kata-kata) tidak membatalkan arti generiknya.
Joonas Pulakka
33

Kiat saya sendiri:

  • big endian = big-end pertama! (byte pertama (alamat terendah) adalah MSB)
  • little endian = little-end pertama! (byte pertama (alamat terendah) adalah LSB)
KB99
sumber
3
Ya, ini adalah cara saya memikirkannya: Big Endian "Mulai pada akhir BESAR", sedangkan Little Endian "Mulai pada akhir Kecil". Ini seperti tongkat baseball, ada dua ujung tongkat, yang satu besar, yang lain kecil. Ini benar-benar tidak sulit konsep.
Shane Kilkelly
6

Cara terbaik untuk mengingat ini adalah bahwa orang beradab mencari varietas dan karenanya makan telur mereka berbeda dari yang mereka pesan. Sedangkan kita menulis angka desimal dimulai dari angka besar pertama (big endian), kita makan telur rebus dari ujung kecil (little endian).

Andrey Fedorov
sumber
1
Jawaban ini sebagian besar non-teknis, namun itu sepenuhnya akurat dan membuat saya tertawa. Kerja bagus.
6

Angka big-endian mulai dari "big end". Angka-angka little-endian dimulai dari "little end".

Keduanya merupakan singgungan untuk masalah di mana mulai makan telur Anda, sesuai Gulliver's Travels.

Dalam hal ini, "akhir" bukan kebalikan dari awal, itu hanya berarti setiap ekstrim dari (tali | string | nomor | urutan), sehingga mereka tidak disebut "finishian besar" atau "finishian kecil" (yang pasti akan menjadi kebalikan dari "mulai").

Vatine
sumber
Memang. Dan cara mengingat yang termudah (dan paling menyenangkan) adalah pergi dan membaca Travels Gulliver. Saya jamin Anda tidak akan pernah lupa yang mana lagi!
Jules
Anda harus menuliskan "mulai makan" dalam huruf tebal (juga 72pt, <blink>), itu benar-benar alasan utama semua kebingungan di sini.
T Nierath
2

Cara termudah untuk saya ingat adalah mengubah kata "endian" menjadi "startian". Bilangan bulat pemula mulai dengan ujung besar (misalnya byte paling signifikan didahulukan), dan bilangan bulat pemula mulai dengan ujung kecil (mis. Byte paling tidak signifikan diutamakan).

dreamlax
sumber
Jangan ragu untuk mengucapkan startian sebagai /'stɑːr.ʃən/ atau /'stɑːr.ti.ən/ (hilangkan the / r / untuk aksen non-rhotic)
dreamlax
Ini cukup pintar, dan mudah diingat.
Coldblackice
1

Saya tidak pernah bisa mengingat yang "big-endian" dan yang "little-endian" tetapi tahu endianness dari prosesor PowerPC dan Intel x86. Little memiliki sebagian besar huruf yang sama dengan Intel, jadi Intel x86 adalah little-endian.

Tentu saja itu hanya berguna jika Anda tahu urutan byte PPC dan x86. Di sisi lain, Anda sekarang harus ingat bahwa Intel x86 = little-endian. Dan ingat bahwa x86 dan ARM sangat, sangat kompatibel bahkan dengan set instruksi yang sama sekali berbeda.

gnasher729
sumber
1

Saya akan begini: Besar itu indah!

Besar == indah == benar.
Endianess yang tepat adalah yang dapat Anda baca dalam hexdump, yang merupakan yang menempatkan byte paling signifikan terlebih dahulu, seperti halnya manusia waras.

Sedikit == jelek == salah.
Hexdumps yang diproduksi oleh endianess ini benar-benar salah sehingga Anda lari berteriak "Otak!". Mungkin ini adalah semacam kekejian alien, kita hanya bisa berspekulasi dengan asal mula kekejaman ini. Namun demikian, itu ada, dan kita terjebak dengannya.

Pitty, itu tidak selalu varian terbaik yang membuat balapan ...

cmaster - mengembalikan monica
sumber
Little == ugly == wrong... "Bahkan orang terkecil dapat mengubah arah masa depan" -Galadrial, LOTR
Coldblackice
-1

Dalam big endian: (Urutan naik)

Yaitu rendah ke tinggi

0 | 1 | 2 | 3 ^ ^ Mulai Akhir

In little-Endian: (Urutan menurun)

Tinggi sampai rendah

yaitu

3 | 2 | 1 | 0 ^ ^ Mulai Akhir

pengguna222896
sumber
1
Pertanyaan itu meminta trik praktis untuk mengingat yang mana.
gnasher729