Forum: Mikrocontroller und Digitale Elektronik Little- und Big-Endian


von Gast (Gast)


Lesenswert?

Hallo,

wie der Betreff schon sagt, frage ich mich, wie die Unterschiede bei 
Little- und Big-Endian sind. Besonders die Darstellung auf einem 16-Bit 
Controller würde mich interessieren.

Bsp.: Variable vom Typ unsigned long x = 0xA1B2C3D4

Little Endian:
1
Wert    :  A1 B2 C3 D4
2
Adresse :   3  2  1  0
Big Endian:
1
Wert    : D4 C3 B2 A4
2
Adresse :  3  2  1  0

Bei einem 16-Bit System werden nun immer 2 Byte zusammen gespeichert, so 
dass für obiges Bespiel 2 Speicherplätze im Speicher belegt werden.

Frage: Werden bei Big-Endian nur die Bytes "vertauscht" oder werden auch 
die Bits komplett gedreht im Verleich zu Little-Endian:
1
Little Endian: 01110111 10001000
2
Big Endian   : 10001000 01110111 ??
3
oder
4
Big Endian   : 00010001 11101110 ???
Hat das ganze einen Einfluss auf Schiebeoperationen?

der Gast.

von Null (Gast)


Lesenswert?

Nein hat es nicht. Ein Schieberechts ist immer div 2. Ob 8 oder 16 bit

von Karl H. (kbuchegg)


Lesenswert?

Gast wrote:
> Hallo,
>
> Frage: Werden bei Big-Endian nur die Bytes "vertauscht" oder werden auch
> die Bits komplett gedreht im Verleich zu Little-Endian:

Es werden nur die Bytes im Speicher vertauscht.

> Hat das ganze einen Einfluss auf Schiebeoperationen?

Nein.
Schiebeoperationen werden in der CPU ausgeführt.
Dort merkst du nichts ob das jetzt ein Big Endian
oder ein Little Endian System ist. Big Endian
oder Little Endian ist nur dann interesasnt wenn
* man direkt im Speicher nachsieht
* eine Übertragung zu einem anderen System macht.

von A.K. (Gast)


Lesenswert?

> Werden bei Big-Endian nur die Bytes "vertauscht" oder werden
> auch die Bits komplett gedreht im Verleich zu Little-Endian:

Es ist tatsächlich etwas inkonsequent und auch schon mal problematisch, 
die Bytes von links nach rechts und die Bits von rechts nach links zu 
numerieren. Diverse Architekturen, die zumindest ursprünglich big endian 
waren, numerieren daher auch die Bits von links nach rechts (z.B. IBM, 
also auch PowerPC). Dann passt es wieder. Nur die Mathematik nimmt etwas 
Schaden, weil bei der Zahl (1 = 2 hoch 0) im Register eben nicht Bit 0, 
sondern entweder Bit 31 oder Bit 63 gesetzt ist, je nachdem ob 32bit- 
oder 64bit Implementierung.

Ein anderes abschreckendes Beispiel ist die 68000-Familie, 
bekanntermassen big endian. Als mit der 020 die Bitfeldbefehle kamen, 
stellte Motorola fest, dass mit der ursprünglichen Bitnumerierung nicht 
funktioniert. Und daher numerierten forthin die Einzelbitbefehle 
weiterhin von rechts nach links, die Bitfeldbefehle von links nach 
rechts.

Und Spassvögel von DEC hatten früher Maschinen verbrochen, in denen die 
Bytes einer Integer in die eine Richtung liefen, die Worte einer 
Fliesskommazahl in die andere.

von Gast (Gast)


Lesenswert?

OK,
danke für die Antworten. Da bin ich wieder ein klein wenig schlauer.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.