![Berechnung des niedrigstwertigen Bits in Little-Endian und Big-Endian](https://rvso.com/image/1395311/Berechnung%20des%20niedrigstwertigen%20Bits%20in%20Little-Endian%20und%20Big-Endian.png)
Nach meinen Untersuchungen speichert Little Endian das niederwertigste Byte in der kleinsten Speicheradresse, während Big Endian das höchstwertige Byte in der kleinsten Speicheradresse speichert.
Ich verstehe jedoch nicht, wie ich die signifikanten Bytes berechnen und vergleichen soll.
Zum Beispiel von diesemWebsite, das Bild unten zeigt, wie die 4 Bytes, 90, AB, 12, CD in Speicheradressen im Little-Endian-Format gespeichert werden.
Wie vergleiche ich, welches der 4 Bytes größer ist? Ich habe zuerst alle in Hexadezimalwerte umgewandelt und vergleiche dann auf der Grundlage der Dezimalwerte, aber auf diese Weise scheint es nicht zu funktionieren.
205 > 18, CD ist jedoch an der kleinsten Speicheradresse gespeichert.. also.. liege ich falsch.
Wir sind für jede Klarstellung dankbar.
Treating CD as a hex value, with a decimal value of 205.
Treating 12 as a hex value, with a decimal value of 18.
Treating AB as a hex value, with a decimal value of 171.
Treating 90 as a hex value, with a decimal value of 144.
Antwort1
Ich glaube, dass die Webseite, auf die Sie verlinken, eine sehr verwirrende Beschreibung der Byte-Reihenfolge enthält!
Der tatsächliche Wert der einzelnen Bytes im Wort hat keine Bedeutung dafür, wo im Speicher sie gespeichert sind, sondern nur für ihre Position als Teil des gesamten 4-Byte-Worts.
Endianness gilt nur für Wörter mit mehreren Bytes. In Ihrem Fall haben Sie ein 4-Byte-Wort wie folgt:
Decimal Hex Binary
2427130573 90 AB 12 CD 10010000 10101011 00010010 11001101
Dies ist die Big-Endian-Darstellung, bei der das höchstwertige Byte ( 0x90
) zuerst im Speicher oder an der niedrigsten Speicheradresse gespeichert wird.
Bei der Little-Endian-Darstellung werden die Bytes im Speicher einfach wie folgt umgekehrt:
Decimal Hex Binary
2427130573 CD 12 AB 90 11001101 00010010 10101011 10010000
Jetzt wird das niederwertigste Byte ( 0xCD
) zuerst im Speicher bzw. an der niedrigsten Speicheradresse gespeichert.
Sie sehen, dass nicht die tatsächlichen Werte der beteiligten Bytes deren Speicherort im Speicher bestimmen, sondern nur ihre Position im gesamten Wort.
Das Konzept der Byte-Reihenfolge geht auf die CPU-Architektur zurück, wie in dem von Ihnen verlinkten Artikel beschrieben wird, und beide Methoden haben Vor- und Nachteile.
Die natürlichste Art für Menschen, über Zahlen nachzudenken, ist in Big-Endian-Notation, weil wir Dezimalzahlen so behandeln. In Ihrem Fall 2427130573
könnte man sagen, dass die Dezimalzahl in Big-Endian-Notation geschrieben wird, d. h. die höchstwertige Ziffer ( 2
) wird zuerst geschrieben, wobei die Wertigkeit nach rechts abnimmt (d. h. eine Änderung des Werts der Ziffer ganz links hat die größte Bedeutung für den Wert der Zahl). Die Zahl könnte genauso gut von links nach rechts geschrieben werden, also 3750317242
mit der niedrigstwertigen Ziffer zuerst, solange Sie wissen, wie man sie so liest (EDIT: übrigens ist das der Grund, warum Unicode-Dateien eine Byte Order Mark (BOM) in den ersten 2 Bytes der Datei speichern sollten, damit das Betriebssystem weiß, wie es die Datei interpretieren soll.)
Für Computer ist es jedoch oft am effizientesten, wenn das niedrigstwertige Byte zuerst gespeichert wird, um Berechnungen durchzuführen. Ich denke, dass die Argumente für Big- vs. Little-Endianness ein Thema für eine andere Diskussion sind und es dazu online viele Quellen gibt!
Ich hoffe, das trägt etwas zur Aufklärung bei!