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.