Bitwertigkeit

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Die Bitwertigkeit legt den Stellenwert eines einzelnen Bits fest, den es durch seine Position innerhalb einer Binärzahl (auch Dualzahl genannt) haben soll. Wichtig ist diese Festlegung auch bei der seriellen Datenübertragung sowie für parallele Busse in der Datenverarbeitung.

Werden acht Bits zu Bytes gruppiert und diese wiederum zu größeren Zahlenformaten, so ist zusätzlich die Byte-Reihenfolge festzulegen.

Die Bitnummerierung ist unabhängig von der Byte-Reihenfolge (Byte-Endianness) und von der „Bit-Endianness“.

LSB 0 Bitnummerierung[Bearbeiten]

8-Bit-Zahl mit Bit 0 als dem LSB („LSB 0“)
Dieselbe 8-Bit-Zahl ebenfalls mit „LSB 0“, gespiegelt gezeichnet

Die niedrigstwertige Bitposition innerhalb einer Binärzahl ist diejenige mit dem niedrigsten Stellenwert. Ist bei einer Binärzahl mit den Positionen \scriptstyle 0,1,\ldots,N-1 die Bitposition 0 die niedrigstwertige, dann ist deren Wert mit \scriptstyle 1 zu multiplizieren. Der Gesamtwert der Binärzahl ist:

\sum_{i=0}^{N-1} a_i \cdot 2^i

Die Bits sind dann gemäß LSB 0 (aus dem Englischen für least significant bit) nummeriert.

MSB 0 Bitnummerierung[Bearbeiten]

8-Bit-Zahl mit Bit 0 als dem MSB („MSB 0“)
Dieselbe 8-Bit-Zahl ebenfalls mit „MSB 0“, gespiegelt gezeichnet

Die höchstwertige Bitposition innerhalb einer Binärzahl ist diejenige mit dem höchsten Stellenwert. Ist bei einer Binärzahl mit den Stellen \scriptstyle 0,1,\ldots,N-1 das Bit 0 das höchstwertige, dann ist sein Wert mit \scriptstyle 2^{N-1} zu multiplizieren. Der Gesamtwert der Binärzahl ist:

\sum_{i=0}^{N-1} a_i \cdot 2^{N-1-i}

Die Bits sind dann gemäß MSB 0 (aus dem Englischen für most significant bit) nummeriert.

Bit-Reihenfolge[Bearbeiten]

Werden die Stellen gemäß ihrer absteigenden Wertigkeit horizontal von links nach rechts aufgetragen, so hängt es von der Bit-Reihenfolge ab, ob mit der Bit-Nummerierung rechts (bei LSB 0) oder links (bei MSB 0) begonnen wird.

Beginnt die Zählung mit 0 für das niedrigstwertige Bit (LSB) auf der rechten Seite und geht von rechts nach links, so spricht man von „LSB 0“. Beginnt dagegen die Zählung mit 0 für das höchstwertige Bit (MSB) auf der linken Seite und geht von links nach rechts, so spricht man von „MSB 0“.

Beispiel: Die 8-Bit-Zahl 220dez mit MSB 0 und LSB 0
MSB LSB
Bit-Nr. bei LSB 0 7 6 5 4 3 2 1 0
MSB 0 0 1 2 3 4 5 6 7
Inhalt des Bit 1 1 0 1 1 1 0 0
Stellen-Wert dezimal 128 64 32 16 8 4 2 1

Zahlenformat und Vorzeichenbit[Bearbeiten]

Das höchstwertige Bit (MSB) zeigt im Einerkomplement, Zweierkomplement und anderen Zahlenformaten mit Vorzeichenbit auch an, ob die entsprechende Dezimalzahl positiv oder negativ ist. Beim Zweierkomplement zählt die Null dabei zu den nicht-negativen Zahlen, sodass man mehr negative als positive Zahlen darstellen kann. Bei anderen Zahlenformaten wie dem Einerkomplement oder Gleitkommazahlen nach IEEE-754-Standard gibt es zwei Darstellungen der Null (+0 und −0).

Adressierung von Bits[Bearbeiten]

Dieselben Annahmen wie im Artikel „Byte-Reihenfolge“ seien vorausgesetzt.

Für die allermeisten in der Praxis verwendeten Rechner besteht die kleinste addressierbare Einheit aus mehr als einem Bit, beispielsweise aus einem Byte enthaltend 8 Bits. Mithin lässt sich ein einzelnes Bit nicht unmittelbar adressieren. Fügt man einer Byte-Adresse ein Bit-Offset ∈ 0,1,…,7 bei, so wird ein einzelnes Bit eindeutig spezifizierbar. Diese Art der Spezifikation wird Bit-Adressierung genannt. Sie lässt sich über den Umweg von Registerverschiebungen verwirklichen. In der Form ByteAdresse*8+BitOffset hat sie folgende Eigenschaften:

Adress-
Inkrement
Links
-Shift
Rechts
-Shift
Big-Endian –1 +1
Little-Endian +1 –1
  • Von den Effekten an den beiden Rändern des Registers abgesehen bedeutet eine Shift-Operation um 1 Bit eine Veränderung der Bit-Adresse um 1 (genauer: einen Transport der Bitkette an eine um 1 veränderte Bitadresse), und zwar entspricht
    • ein Links-Shift bei Big-Endian einer Verringerung um 1
    • ein Rechts-Shift bei Big-Endian einer Erhöhung um 1
    • ein Links-Shift bei Little-Endian einer Erhöhung um 1
    • ein Rechts-Shift bei Little-Endian einer Verringerung um 1
  • Eine Shift-Operation um 8 Bit ist dasselbe wie 8 Shift-Operationen um 1 Bit in immer die gleiche Richtung. Von den Randeffekten abgesehen bedeutet eine Shift-Operation um 8 Bit eine Veränderung der Byte-Adresse um 1, und zwar entspricht
    • ein Links-Shift bei Big-Endian einer Verringerung um 1
    • ein Rechts-Shift bei Big-Endian einer Erhöhung um 1
    • ein Links-Shift bei Little-Endian einer Erhöhung um 1
    • ein Rechts-Shift bei Little-Endian einer Verringerung um 1

Im Ergebnis induzieren die Shift-Operationen eine eindeutige konsistente Adressierung von den Bytes auf die Bits.

Platziert man in der horizontalen Darstellung die niedrigen Adressen links und die hohen rechts, so lassen sich für 32 Bit lange Bit-Arrays oder vorzeichenlose Ganzzahlen die Konventionen der Bit-Nummerierung folgendermaßen gegenüberstellen:

Aufsteigende
Offsets
Byte-Offset 0 1 2 3
Bit-Offset 0,1,…,7 0,1,…,7 0,1,…,7 0,1,…,7
Bitnummer bei
Big-Endian und
MSB 0 0,1,…,7 08,…,15 16,…,23 24,…,31
LSB 0 31,…,24 23,…,16 15,…,08 7,…,1,0
Bitnummer bei
Little-Endian und
MSB 0 31,…,24 23,…,16 15,…,08 7,…,1,0
LSB 0 0,1,…,7 08,…,15 16,…,23 24,…,31

Die Nummerierung der Bits bei Big-Endian mit MSB 0 und Little-Endian mit LSB 0 entspricht somit der Bit-Adresse. Dagegen nummerieren die Konventionen Big-Endian mit LSB 0 und Little-Endian mit MSB 0 die Bits im Register gegenläufig zu ihrer Adresse, was mit der Indizierung in einem Array antikorreliert.

Bits und Byte[Bearbeiten]

Analog zum höchstwertigen Bit bezeichnet MSB auch das „most significant byte“ (MSB, höchstwertige Byte); analog dazu LSB auch das „least significant byte“ (LSB, niedrigstwertige Byte). Da beide Begriffe mit MSB bzw. LSB abgekürzt werden, muss notfalls aus dem Kontext der Anforderungen erkannt werden, welche Version gemeint ist da die Verwechselung eine Ursache für Programmfehler darstellt.