Gibt es einen praktischen Trick, um sich an den Unterschied zwischen Big-Endian und Little-Endian zu erinnern?


13

Ich arbeite nicht jeden Tag mit Big-Endian- und Little-Endian-Problemen und daher fällt es mir sehr schwer, mich zu erinnern, welches was ist.

Kürzlich bekam ich ein Interview, in dem ich nach dem Unterschied zwischen den beiden fragte. da ich mich nicht erinnerte, entschied ich mich zu "raten" (immerhin 50% Chance), aber ich scheiterte.

Gibt es einen weithin bekannten praktischen Trick, um sich daran zu erinnern, was der Unterschied zwischen Big Endian und Little Endian ist?


10
Ich denke, Sie sollten besser angeben, was Endianess ist, und sagen, dass Sie sich nie erinnern können, wie es sich verhält, also googeln Sie es immer
jk.

Auch ich habe Probleme, mich daran zu erinnern, und es gibt zu viele verwirrende mnemotechnische Tricks. Meine einzige verlässliche Hilfe ist es, den Endianness- Zauber auf Google anzuwenden, damit ich den Wikipedia-Artikel erhalte .
Mouviciel

3
Witziger Zufall - Ich bin heute nur über diesen Link gestolpert und es ist überraschend relevant commandcenter.blogspot.com/2012/04/byte-order-fallacy.html
Nevermind

@Nevermind Ich habe aufgehört, diesen Artikel nach dem zweiten Absatz zu lesen. "Nur für Compiler-Autoren und Leute von Interesse, die sich mit Registern zugeordnetem Speicher beschäftigen müssen"? Abgesehen von der Tatsache, dass dies ein schrecklicher Gartenpfadsatz ist , impliziert dies, dass Code, der sich mit Registern befasst, ein Randfall ist. Versuchen Sie es mit einem Computer ohne Gerätetreiber.
dodgethesteamroller

Antworten:


14

Ich habe immer gedacht, dass es falsch definiert ist, und das ist auch der Tipp, sich daran zu erinnern. Als nicht-englischer Muttersprachler sehe ich "end" als das Gegenteil von "start" (obwohl "end" offensichtlich entweder "end" - "start end" oder "end end" bedeuten kann). Wie auch immer, ich erinnere mich nur daran, dass "es falsch definiert ist" :)

  • In Big Endian ist das wichtigste (größte) Byte am Anfang .
  • In Little Endian ist das niedrigstwertige (kleinste) Byte am Anfang .

Oder mit Bezug auf die Bit-Endianität :

  • 128 64 32 16 8 4 2 1 ist big endian, weil es zum kleinen endet.
  • 1 2 4 8 16 32 64 128 ist Little Endian, weil es zum Großen endet.

Obwohl sich die übliche Verwendung des Wortes Endianness darauf bezieht, wie Bytes innerhalb eines Wortes angeordnet sind, bezieht sich seine generische Bedeutung auf die Anordnung von einzeln adressierbaren Unterkomponenten innerhalb der Darstellung eines größeren Datenelements ( wie in Wikipedia erläutert ).


5
ahh, aber die little-endian lilliputians haben ihre eier am kleinen ende angefangen (geknackt), also ist es der richtige weg
jk.

4
-1: Endian-ness bezieht sich auf Bytes innerhalb eines Wortes, nicht auf Bits innerhalb eines Bytes.
kdgregory

1
@kdgregory - Am Ende wird die Bitnummerierung innerhalb eines Wortes beeinflusst. Haben Sie versucht, Bitfeldstrukturen für verschiedene Endianer zu erstellen? Ich bin damit einverstanden, dass die Antwort falsch ist.
Mouviciel

@Kdgregory: Nach Wikipedia , endianness bezieht sich auf die Anordnung von einzeln adressierbaren Unterkomponenten innerhalb der Darstellung eines größeren Datenelementes. Das ist der generische Fall. Es gibt auch eine Vorstellung von etwas Endianness . Sie haben Recht, dass sich die häufigste Verwendung von Endianness darauf bezieht, wie Bytes in einem Wort angeordnet sind, und meine Beispiele haben dies zugegebenermaßen nicht widergespiegelt. Das erste Beispiel wurde durch den allgemeinen Fall ersetzt.
Joonas Pulakka

2
@kdgregory: Seit wann ist das Vorhandensein von Hardware erforderlich, um CS theoretische Vorstellungen zu rechtfertigen? Aber sehr gut: 8051 hat bitadressierbare Register. In der Sprache Ada kann die entsprechende Bitreihenfolge für die Datentypdarstellung angegeben werden ( pdf ). Die Übertragungsreihenfolge von Bits über ein serielles Medium muss natürlich die Bit-Endianze definieren. Die Tatsache, dass die übliche Verwendung von "Endianness" sich auf einen Sonderfall bezieht (Bytes in Wörtern), macht seine generische Bedeutung nicht ungültig.
Joonas Pulakka

33

Mein eigener Tipp:

  • Big Endian = Big End zuerst! (das erste Byte (niedrigste Adresse) ist das MSB)
  • Little Endian = Little End zuerst! (das erste Byte (niedrigste Adresse) ist das LSB)

3
Ja, so sehe ich das: Big Endian "Beginnt am großen Ende", während Little Endian "Beginnt am kleinen Ende". Es ist wie bei einem Baseballschläger, es gibt zwei Enden des Schlägers, eines ist groß, das andere ist klein. Es ist wirklich nicht so schwer von einem Konzept.
Shane Kilkelly

6

Die beste Art, sich daran zu erinnern, ist, dass zivilisierte Völker Abwechslung suchen und ihre Eier daher anders essen, als sie ihre Zahlen bestellen. Während wir Dezimalzahlen schreiben, die mit den großen Ziffern beginnen (Big Endian), essen wir weichgekochte Eier vom kleinen Ende (Little Endian).


1
Diese Antwort ist größtenteils nicht technisch, war aber völlig korrekt und hat mich zum Lachen gebracht. Gut gemacht.

6

Big-Endian-Zahlen beginnen am "großen Ende". Little-Endian-Zahlen beginnen am "kleinen Ende".

Beide sind eine Anspielung auf die Frage, wo Sie anfangen sollen, Ihr Ei gemäß Gullivers Reisen zu essen.

In diesem Fall ist "Ende" nicht das Gegenteil von "Anfang", sondern bedeutet nur ein Extrem einer (Schnur), so dass sie nicht "großer Finisher" oder "kleiner Finisher" genannt werden (was definitiv der Fall sein würde) das Gegenteil von "Start").


Tatsächlich. Und die einfachste (und unterhaltsamste) Art, sich zu erinnern, ist, Gullivers Reisen zu lesen. Ich garantiere, Sie werden nie wieder vergessen, was was ist!
Jules

Du solltest "anfangen zu essen" fett schreiben (auch 72pt, <blink>), das ist wirklich der ganze Grund für all die Verwirrung hier.
T Nierath

2

Am einfachsten fällt es mir ein, das Wort „Endian“ in „Startian“ zu ändern. Große startianische Ganzzahlen beginnen mit dem großen Ende (z. B. die höchstwertigen Bytes kommen zuerst) und kleine startianische Ganzzahlen beginnen mit dem kleinen Ende (z. B. die niedrigstwertigen Bytes kommen zuerst).


Fühlen Sie sich frei, startian als /'stɑːr.ʃən/ oder /'stɑːr.ti.ən/ auszusprechen (lassen Sie das / r / für nicht-rhotic Akzente
weg

Das ist ziemlich clever und leicht zu merken.
Coldblackice

1

Ich konnte mich nie erinnern, welches "Big-Endian" und welches "Little-Endian" ist, kannte aber die Endianness von PowerPC- und Intel x86-Prozessoren. Little hat die meisten Buchstaben mit Intel gemeinsam, daher ist Intel x86 Little-Endian.

Das ist natürlich nur sinnvoll, wenn Sie die Bytereihenfolge von PPC und x86 kennen. Andererseits sollten Sie sich jetzt daran erinnern, dass Intel x86 = Little-Endian ist. Und denken Sie daran, dass x86 und ARM auch mit völlig unterschiedlichen Befehlssätzen sehr, sehr kompatibel sind.


1

Ich würde es so ausdrücken: Groß ist schön!

Groß, schön, richtig.
Die richtige Endianess ist diejenige, die Sie in einem Hexdump lesen können, bei der das höchstwertige Byte an erster Stelle steht, wie bei jedem vernünftigen Menschen.

Wenig hässlich falsch.
Die Hexdumps, die von dieser Endianess produziert werden, sind einfach so falsch, dass Sie schreiend "Gehirne!" Davonlaufen. Vielleicht ist dies eine Art fremder Gräuel, über den Ursprung dieser Gräueltaten können wir nur spekulieren. Trotzdem existiert es und wir bleiben dabei.

Schade, es ist nicht immer die beste Variante, die das Rennen macht ...


Little == ugly == wrong... "Auch die kleinste Person kann den Kurs der Zukunft ändern" -Galadrial, LOTR
Coldblackice

-1

In Big Endian: (aufsteigend)

Niedrig zu hoch dh

0 | 1 | 2 | 3 ^^ Start Ende

In Little-Endian: (absteigende Reihenfolge)

Absteigend

dh

3 | 2 | 1 | 0 ^ ^ Start Ende


1
In der Frage wurde nach einem praktischen Trick gefragt, um sich daran zu erinnern, welchen.
gnasher729
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.