Czy jest jakaś praktyczna sztuczka, aby zapamiętać różnicę między big-endianem a little-endianem?


13

Nie pracuję codziennie z problemami big-endian i little-endian, dlatego bardzo trudno mi zapamiętać, który z nich jest czymś.

Niedawno dostałem wywiad z pytaniem o różnicę między nimi; ponieważ nie pamiętam, postanowiłem „zgadnąć” (w końcu 50% szansy), ale mi się nie udało.

Czy jest jakaś powszechnie znana sztuczka praktyczna, aby pamiętać, jaka jest różnica między wielkim endianem a małym endianem?


10
Wydaje mi się, że lepiej jest powiedzieć, co to jest endianess i powiedzieć, że nigdy nie pamiętasz, w którą stronę to jest, więc zawsze google
jk.

Ja też mam problemy z zapamiętaniem tego i jest zbyt wiele mylących sztuczek mnemotechnicznych. Moją jedyną niezawodną pomocą jest rzucenie zaklęcia endiannessa na Google, aby uzyskać artykuł z Wikipedii .
mouviciel

3
Zabawny zbieg okoliczności - natknąłem się tylko na ten link dzisiaj i jest on zaskakująco trafny Commandcenter.blogspot.com/2012/04/byte-order-fallacy.html
Nevermind

@Nevermind Przestałem czytać ten artykuł po drugim akapicie. „Interesujące tylko pisarzy kompilatorów i osoby, które mają do czynienia z pamięcią mapowaną na rejestry”? Poza tym, że jest to okropne zdanie na ścieżkę ogrodową , oznacza to, że kod zajmujący się rejestrami jest przypadkiem granicznym. Spróbuj użyć komputera kiedyś bez sterowników urządzeń.
dodgethesteamroller 16.09.15

Odpowiedzi:


14

Zawsze myślałem, że to źle zdefiniowane, i to także wskazówka, żeby o tym pamiętać. Jako nieanglojęzyczny użytkownik języka angielskiego widzę „koniec” jako przeciwieństwo „początku” (chociaż oczywiście „koniec” może oznaczać albo koniec - początek, albo koniec). W każdym razie po prostu pamiętam, że „jest źle zdefiniowane” :)

  • W big endian najbardziej znaczący (największy) bajt jest na początku .
  • W małym endian , najmniej znaczący (najmniejszy) bajt jest na początku .

Lub odnosząc się do endianizmu bitowego :

  • 128 64 32 16 8 4 2 1 jest wielkim endianem, ponieważ kończy się na małym.
  • 1 2 4 8 16 32 64 128 to mały endian, ponieważ kończy się na dużym.

Chociaż zwykłe użycie słowa endianness odnosi się do tego, w jaki sposób bajty są uporządkowane w obrębie słowa, jego ogólne znaczenie odnosi się do uporządkowania indywidualnie adresowalnych podskładników w ramach reprezentacji większego elementu danych ( jak wyjaśniono w Wikipedii ).


5
ach, ale lilliputianie z małego endianu zaczęli (pękali) jaja na małym końcu, więc jest to właściwa droga
jk.

4
-1: Endian-ness odnosi się do bajtów w słowie, a nie do bitów w bajcie.
kdgregory

1
@kdgregory - Ostatecznie na numerację bitów ma wpływ słowo. Czy próbowałeś struktur bit-field u różnych endianów? Zgadzam się jednak, że odpowiedź jest błędna.
mouviciel

@Kdgregory: Według Wikipedii , kolejność bajtów odnosi się do uporządkowania indywidualnie adresowalnych podkomponenty w reprezentacji większego elementu danych. To jest ogólny przypadek. Istnieje również pojęcie nieco endianizmu . Masz rację, ponieważ najczęstsze użycie endianizmu odnosi się do tego, w jaki sposób bajty są uporządkowane w jednym słowie, a moje przykłady nie odzwierciedlają tego. Pierwszy przykład zastąpiono zwykłym przypadkiem.
Joonas Pulakka

2
@kdgregory: Od kiedy wymagane jest istnienie sprzętu dla uzasadnienia teoretycznych pojęć CS? Ale bardzo dobrze: 8051 ma rejestry adresowalne bitowo. Język Ada umożliwia określenie odpowiedniej kolejności bitów dla reprezentacji typu danych ( pdf ). Kolejność transmisji bitów przez medium szeregowe musi oczywiście określać endianowość bitów. Fakt, że zwykłe użycie „endianizmu” odnosi się do specjalnego przypadku (bajty słowne), nie unieważnia jego ogólnego znaczenia.
Joonas Pulakka

33

Moja własna wskazówka:

  • big endian = big-end pierwszy! (pierwszy bajt (najniższy adres) to MSB)
  • mały endian = najpierw mały koniec! (pierwszy bajt (najniższy adres) to LSB)

3
Tak, tak o tym myślę: Big Endian „Zaczyna się od WIELKIEGO końca”, a Little Endian „Zaczyna się od małego końca”. To jest jak kij bejsbolowy, są dwa końce kija, jeden jest duży, drugi jest mały. To naprawdę nie jest takie trudne pojęcie.
Shane Kilkelly,

6

Najlepszym sposobem na zapamiętanie tego jest to, że ludzie cywilizowani szukają różnorodności, a zatem jedzą jajka inaczej niż porządkują. Podczas gdy piszemy cyfry dziesiętne zaczynając od wielkich cyfr jako pierwszy (duży endian), jemy jajka na miękko z małego końca (mały endian).


1
Ta odpowiedź jest w większości nietechniczna, ale była całkowicie dokładna i rozśmieszyła mnie. Dobra robota.

6

Liczby big-endian zaczynają się od „dużego końca”. Liczby Little-Endian zaczynają się od „małego końca”.

Oba są aluzją do kwestii, od czego zacząć jeść jajko, zgodnie z podróżami Guliwera.

W tym przypadku „koniec” nie jest przeciwieństwem początku, oznacza po prostu jakąkolwiek skrajność (sekwencja | lina | ciąg | liczba | sekwencja), a zatem nie są one nazywane „dużym finiszem” lub „małym finiszerem” (co na pewno byłoby przeciwieństwo „start”).


W rzeczy samej. A najłatwiejszym (i najbardziej zabawnym) sposobem na zapamiętanie jest przeczytanie Podróży Guliwera. Gwarantuję, że nigdy nie zapomnisz, co jest znowu!
Jules

Powinieneś pogrubić „zacznij jeść” (także 72pkt, <blink>), to naprawdę cały powód tego zamieszania.
T Nierath,

2

Najłatwiej jest mi zapamiętać zmianę słowa „endian” na „startian”. Duże początkowe liczby całkowite zaczynają się od dużego końca (np. Najważniejsze bajty są pierwsze), a małe początkowe liczby całkowite zaczynają się od małego końca (np. Najmniej znaczące bajty są pierwsze).


Możesz wymówić startian jako /'stɑːr.ʃən/ lub /'stɑːr.ti.ən/ (pomiń / r / dla nie-
rhotycznych

Jest to dość sprytne i łatwe do zapamiętania.
Coldblackice

1

Nigdy nie pamiętałem, który jest „big-endian”, a który „little-endian”, ale znałem endianizm procesorów PowerPC i Intel x86. Niewiele ma większość liter wspólnych z Intelem, więc Intel x86 jest little-endian.

Oczywiście jest to przydatne tylko, jeśli znasz kolejność bajtów PPC i x86. Z drugiej strony powinieneś teraz pamiętać, że Intel x86 = little-endian. I pamiętaj, że x86 i ARM są bardzo, bardzo kompatybilne, nawet z zupełnie innymi zestawami instrukcji.


1

Powiedziałbym tak: Big jest piękny!

Duży == piękny == racja.
Właściwą endianią jest ta, którą można odczytać na zrzutie heksadecymalnym, czyli tym, który stawia najbardziej znaczący bajt na pierwszym miejscu, jak każdy rozsądny człowiek.

Mały == brzydki == źle.
Zrzuty heksowe powstałe w wyniku tego endianizmu są tak błędne, że uciekasz krzycząc „Mózg!”. Może to jest jakaś obrzydliwość kosmitów, możemy jedynie spekulować na temat źródła tego okrucieństwa. Niemniej jednak istnieje i utknęliśmy z tym.

Pitty, nie zawsze jest to najlepszy wariant, który sprawia, że ​​wyścig ...


Little == ugly == wrong... „Nawet najmniejsza osoba może zmienić bieg przyszłości” - Galadrial,
LOTR

-1

In big endian: (rosnąco)

Niska do wysokiej tj

0 | 1 | 2 | 3 ^ ^ Początek Koniec

In little-Endian: (malejąco)

Malejąco

to znaczy

3 | 2 | 1 | 0 ^ ^ Początek Koniec


1
Pytanie dotyczyło praktycznej sztuczki pozwalającej zapamiętać, która z nich.
gnasher729
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.