bitGateLab Digital · Lernen
Deutsch
Simulator öffnen

Lernen › Thema 6

Zahlensysteme: binär, oktal, hexadezimal und Codes

7 Min. Lesezeit · bitGateLab-Team

Eine digitale Schaltung versteht nur Nullen und Einsen, du musst aber Mengen, Vorzeichen, die Ziffern einer Anzeige und die Positionen eines Drehgebers darstellen. Hier lernst du, wie Stellenwertsysteme funktionieren, wie man zwischen dezimal, binär, oktal und hexadezimal umrechnet, wie man negative Zahlen im Zweierkomplement darstellt und wie man zwei in der Elektronik sehr verbreitete Codes verwendet: BCD und Gray.

Stellenwertsysteme

In einem Stellenwertsystem zur Basis b wird jede Ziffer je nach ihrer Stelle mit einer Potenz von b multipliziert, wobei rechts bei 0 zu zählen begonnen wird. Die Dezimalzahl 347 hat den Wert 3·102 + 4·101 + 7·100. Genauso ist es bei den anderen Basen:

Um Verwechslungen zu vermeiden, gibt man die Basis mit einem tiefgestellten Index an (10102, 178, 3F16) oder mit einem Präfix wie 0b oder 0x.

Umrechnung zwischen den Basen

Von einer beliebigen Basis nach dezimal

Multipliziere jede Ziffer mit ihrem Stellenwert und addiere. Zum Beispiel 2F316 = 2·256 + 15·16 + 3·1 = 512 + 240 + 3 = 755.

Von dezimal nach binär

Teile wiederholt durch 2 und notiere die Reste; die Binärzahl wird von unten nach oben gelesen (der letzte Rest ist das höchstwertige Bit). Eine andere Möglichkeit: immer wieder die größte Potenz von 2 abziehen, die noch hineinpasst.

Zwischen binär, oktal und hexadezimal

Weil 8 = 23 und 16 = 24 gilt, ist der Umweg über das Dezimalsystem nicht nötig: Fasse die Bits von rechts beginnend zu Gruppen von je 3 Bits (oktal) oder je 4 Bits (hexadezimal) zusammen und fülle links bei Bedarf mit Nullen auf.

Beispiel 1: 156 in binär, oktal und hexadezimal umwandeln.

  1. Fortgesetzte Division: 156/2 = 78 R 0; 78/2 = 39 R 0; 39/2 = 19 R 1; 19/2 = 9 R 1; 9/2 = 4 R 1; 4/2 = 2 R 0; 2/2 = 1 R 0; 1/2 = 0 R 1.
  2. Die Reste von unten nach oben gelesen: 156 = 100111002. Probe: 128 + 16 + 8 + 4 = 156.
  3. Oktal: 10 011 100 → 010 011 100 → 2 3 4. Ergebnis 2348 (2·64 + 3·8 + 4 = 156).
  4. Hexadezimal: 1001 1100 → 9 C. Ergebnis 9C16 (9·16 + 12 = 156).

Negative Zahlen: das Zweierkomplement

Ein Register mit n Bits hat keinen Platz für das Minuszeichen, also verwendet man eine Konvention. Praktisch alle Prozessoren nutzen das Zweierkomplement: Das höchstwertige Bit hat ein negatives Gewicht, −2n−1, und die übrigen behalten ihr positives Gewicht. Mit 8 Bits reicht der Wertebereich von −128 bis +127; mit 4 Bits von −8 bis +7.

So erhältst du das Negative einer Zahl:

  1. Schreibe die positive Zahl mit allen ihren Bits auf.
  2. Invertiere jedes Bit (das ist das Einerkomplement).
  3. Addiere 1.

Der Vorteil ist enorm: Addition und Subtraktion werden mit derselben Addiererschaltung ausgeführt, ohne besondere Logik für das Vorzeichen. Es gibt nur eine Null (00000000), und das höchstwertige Bit zeigt direkt an, ob die Zahl negativ ist.

Beispiel 2: −45 mit 8 Bits darstellen und 25 + (−12) berechnen.

  1. 45 = 00101101. Invertiert: 11010010. Nach Addition von 1: 11010011 = −45.
  2. Probe mit den Stellengewichten: −128 + 64 + 16 + 2 + 1 = −45.
  3. Nun 25 + (−12). 25 = 00011001; 12 = 00001100, invertiert 11110011, plus 1: 11110100 = −12.
  4. Summe: 00011001 + 11110100 = 1 00001101. Der Übertrag, der aus Bit 8 herausläuft, wird verworfen.
  5. Ergebnis: 00001101 = 13. Richtig.
Überlauf: Wenn du zwei Zahlen mit gleichem Vorzeichen addierst und das Ergebnis das entgegengesetzte Vorzeichen hat, passt das Ergebnis nicht in die verfügbaren Bits. Zum Beispiel ergibt mit 8 Bits 100 + 50 = 01100100 + 00110010 = 10010110, was im Zweierkomplement −106 statt 150 bedeutet. Die Addition von Zahlen mit unterschiedlichem Vorzeichen läuft nie über.

BCD-Code

Im BCD-Code (binär codierte Dezimalzahl, Variante 8421) wird jede Dezimalziffer einzeln mit 4 Bits dargestellt. So schreibt man 395 als 0011 1001 0101. Das ist nicht dasselbe wie die Umwandlung von 395 ins Binärsystem (1100010112): BCD braucht mehr Bits, dafür geht jede Gruppe direkt an einen Decoder für eine 7-Segment-Anzeige, ganz ohne Divisionen. Die Codes 1010 bis 1111 sind in BCD ungültig; in einem Entwurf behandelt man diese Kombinationen meist als Don't-Care-Bedingungen in den Karnaugh-Diagrammen.

Gray-Code

Beim Gray-Code ändert sich von einem Wert zum nächsten nur ein einziges Bit. Im normalen Binärcode ändern sich beim Übergang von 7 (0111) auf 8 (1000) alle vier Bits gleichzeitig; liest ein Sensor genau während des Übergangs, kann er für einen Augenblick jeden beliebigen Zwischenwert sehen. Mit Gray tritt dieser Fehler nicht auf, deshalb verwendet man ihn in Drehgebern, in Zählern, deren Wert zwischen verschiedenen Taktdomänen übergeben wird, und in den Köpfen der Karnaugh-Diagramme.

DezimalBinärGrayDezimalBinärGray
000000000810001100
100010001910011101
2001000111010101111
3001100101110111110
4010001101211001010
5010101111311011011
6011001011411101001
7011101001511111000

Beispiel 3: binär 1011 nach Gray und zurück.

  1. Übernimm das erste Bit: 1.
  2. 1 ⊕ 0 = 1; 0 ⊕ 1 = 1; 1 ⊕ 1 = 0. Gray = 1110.
  3. Zurück: Übernimm das erste Bit, b3 = 1. Dann b2 = 1 ⊕ 1 = 0, b1 = 0 ⊕ 1 = 1, b0 = 1 ⊕ 0 = 1. Binär = 1011.

In der Tabelle steht bei der Dezimalzahl 11 der Gray-Code 1110: Es stimmt.

Häufige Fehler

Probiere es im Simulator aus

Mit ein paar Eingängen und Ausgängen kannst du diese Darstellungen „live“ sehen und die Umwandlung in den Gray-Code mit XOR-Gattern überprüfen.

  1. Platziere vier Eingänge als Bits b3 bis b0 und schließe eine Ziffernanzeige oder vier LEDs an, um den Wert zu sehen.
  2. Füge drei XOR-Gatter hinzu: g2 = b3 ⊕ b2, g1 = b2 ⊕ b1, g0 = b1 ⊕ b0, und verbinde b3 direkt mit g3.
  3. Schalte die Eingänge von 0000 bis 1111 durch und beobachte an den Ausgängen, dass sich von einem Wert zum nächsten nur ein einziges Gray-Bit ändert.
  4. Erzeuge die Wahrheitstabelle der Schaltung und vergleiche sie mit der Tabelle in diesem Artikel.

Übungen

  1. Wandle 110101102 in hexadezimal und in dezimal um.
    Lösung

    1101 0110 = D616 = 13·16 + 6 = 214.

  2. Wandle 200 in binär und in hexadezimal um.
    Lösung

    200 = 128 + 64 + 8 = 110010002 = C816.

  3. Stelle −100 im Zweierkomplement mit 8 Bits dar.
    Lösung

    100 = 01100100; invertiert 10011011; plus 1: 10011100. Probe: −128 + 16 + 8 + 4 = −100.

  4. Wandle die Dezimalzahl 6 in den 4-Bit-Gray-Code und den BCD-Wert 0111 0010 in dezimal um.
    Lösung

    6 = 0110; Gray: 0, 0 ⊕ 1 = 1, 1 ⊕ 1 = 0, 1 ⊕ 0 = 1 → 0101. Der BCD-Wert 0111 0010 ist 72.

Wie eine Schaltung diese Zahlen addiert und subtrahiert, erfährst du im nächsten Thema: Binäraddierer.