<style>[reveal]{opacity:1 !important;transform:none !important}</style>

Zahlensysteme: binär, hexadezimal, dezimal

Stellenwertsystem verstehen, zwischen Dezimal, Binär und Hex umrechnen, Bits und Bytes, Zweierkomplement und BCD – so liest du Register und Adressen im Datenblatt.

8 Min. LesezeitZahlensystemeBinärDualsystemHexadezimal

Sobald ein Mikrocontroller, ein Sensor-IC oder ein Display im Spiel ist, stehen im Datenblatt Angaben wie „I²C-Adresse 0x3C“, „Register 0x0F, Bit 7 = 1“ oder „12-Bit-Wert im Zweierkomplement“. Wer dann jedes Mal einen Online-Umrechner braucht, kommt nur mühsam voran. Dabei steckt hinter allen drei gängigen Zahlensystemen dasselbe einfache Prinzip, das du vom Dezimalsystem seit der Grundschule kennst. Hast du es einmal durchschaut, rechnest du die meisten Werte im Kopf um.

Das Stellenwertsystem

In der Zahl 352 bedeutet die 3 nicht „drei“, sondern „drei Hunderter“. Jede Stelle hat ein Gewicht, das eine Potenz der Basis ist – im Dezimalsystem eine Potenz von 10:

352 = 3 · 102 + 5 · 101 + 2 · 100

Dasselbe funktioniert mit jeder anderen Basis b. Man braucht dann genau b verschiedene Ziffern, von 0 bis b - 1. Ist die höchste Ziffer erreicht, gibt es einen Übertrag in die nächste Stelle – so wie im Dezimalsystem nach der 9 die 10 kommt.

SystemBasisZiffernStellengewichteSchreibweise im Code
Dezimal100 … 91, 10, 100, 1000 …200
Binär (dual)20, 11, 2, 4, 8, 16 …0b11001000
Hexadezimal160 … 9, A … F1, 16, 256, 4096 …0xC8

Im Hexadezimalsystem reichen die zehn Ziffern nicht aus, deshalb stehen A bis F für die Werte 10 bis 15. Damit klar ist, in welchem System eine Zahl gemeint ist, bekommt sie ein Kennzeichen: In C, Python und den meisten Datenblättern ist das das Präfix 0x für hex und 0b für binär. Daneben siehst du auch ein angehängtes h (C8h), in älteren Assembler-Listings ein vorangestelltes Dollarzeichen oder in Lehrbüchern eine tiefgestellte Basis (C8₁₆).

Binärzahl 1011 mit den Stellengewichten 8, 4, 2, 1 darunter und der Summe 8 + 0 + 2 + 1 = 11
Jede Binärstelle hat ihr Gewicht: Du addierst die Gewichte der Stellen, an denen eine 1 steht.

Bits und Bytes

Eine Binärstelle heißt Bit (binary digit). Sie entspricht genau einem Signal, das an oder aus ist – einem Pin auf High oder Low, einem Transistor, der leitet oder sperrt. Deshalb rechnen digitale Schaltungen binär.

Vier Bits bilden ein Nibble, acht Bits ein Byte. Mit n Bits lassen sich 2n verschiedene Werte darstellen, von 0 bis 2n - 1:

BitsWerteBereich (ohne Vorzeichen)typisch
4160 … 15eine Hex-Ziffer, BCD-Stelle
82560 … 255Byte, PWM-Wert bei 8 Bit
1010240 … 1023ADC eines Arduino Uno
1240960 … 4095ADC eines ESP32 oder STM32
1665 5360 … 65 53516-Bit-Timer, Modbus-Register

Das ganz rechte Bit hat das Gewicht 1 und heißt LSB (least significant bit), das ganz linke MSB (most significant bit). Gezählt wird von rechts bei 0 – Bit 7 ist also das MSB eines Bytes.

Umrechnen in alle Richtungen

Binär → dezimal: Schreib die Stellengewichte über die Bits und addiere die Gewichte, unter denen eine 1 steht. Aus 0b1010 0110 wird 128 + 32 + 4 + 2 = 166.

Dezimal → binär: Teile die Zahl immer wieder durch 2 und notiere den Rest. Die Reste von unten nach oben gelesen ergeben die Binärzahl. Alternativ ziehst du von oben her die größte passende Zweierpotenz ab – bei kleinen Zahlen geht das im Kopf schneller.

Tabelle der fortgesetzten Division von 200 durch 2 mit den Resten 0, 0, 0, 1, 0, 0, 1, 1 und einem Pfeil von unten nach oben zum Ergebnis 11001000
Dezimal nach binär: Die Reste der Division durch 2, von unten nach oben gelesen, ergeben die Binärzahl.

Binär ↔ hexadezimal: Hier liegt der eigentliche Grund, warum es Hex gibt. Weil 16 = 24, entspricht jede Hex-Ziffer genau einem Nibble. Du teilst die Binärzahl von rechts in Vierergruppen und übersetzt jede Gruppe einzeln – ganz ohne Rechnen über die ganze Zahl.

HexBinärHexBinärHexBinärHexBinär
000004010081000C1100
100015010191001D1101
2001060110A1010E1110
3001170111B1011F1111
Die Binärzahl 1100 1000 in zwei Vierergruppen geteilt, darunter C und 8, Ergebnis 0xC8
Je vier Bits ergeben eine Hex-Ziffer: Aus 1100 1000 wird 0xC8.

Hexadezimal → dezimal: Multipliziere jede Ziffer mit ihrem Gewicht 1, 16, 256, 4096 … und addiere.

Dezimal → hexadezimal: Entweder fortgesetzt durch 16 teilen (Reste 10 bis 15 als A bis F schreiben) oder – oft bequemer – erst nach binär und dann in Nibbles.

Hex in Datenblättern und Registern

Ein Peripherie-IC wird über Register gesteuert: Speicherzellen, meist 8 oder 16 Bit breit, in denen jedes Bit oder jede Bitgruppe eine eigene Bedeutung hat. Das Datenblatt zeigt sie als Tabelle von Bit 7 bis Bit 0. Den Wert, den du hineinschreibst, setzt du aus den gewünschten Bits zusammen und gibst ihn als Hex-Zahl an – zwei Hex-Ziffern pro Byte, jede Ziffer steht genau für eine Hälfte der Tabelle.

8-Bit-Register mit den Bitnummern 7 bis 0, dem Inhalt 0 0 1 0 1 1 0 1, MSB links, LSB rechts und dem Wert 0x2D
Ein Registerbyte: Die linke Hälfte 0010 ergibt die 2, die rechte 1101 die D – zusammen 0x2D.

Negative Zahlen: das Zweierkomplement

Ein Byte kennt nur Nullen und Einsen, kein Minuszeichen. Um auch negative Werte zu speichern, haben sich praktisch alle Prozessoren auf das Zweierkomplement geeinigt: Das MSB bekommt ein negatives Gewicht. Bei 8 Bit zählt Bit 7 also -128 statt +128, der Bereich reicht von −128 bis +127.

Den negativen Wert einer Zahl bildest du in zwei Schritten: alle Bits umkehren, dann 1 addieren. Für −5: 0000 0101 → 1111 1010 → 1111 1011 = 0xFB. Probe über die Gewichte: -128 + 64 + 32 + 16 + 8 + 2 + 1 = -5.

Schema: +5 = 0000 0101, invertiert 1111 1010, plus 1 ergibt 1111 1011 = −5 = 0xFB
Zweierkomplement in zwei Schritten: Bits umkehren, eins addieren.

Der Vorteil: Addierer müssen nicht unterscheiden, ob eine Zahl negativ ist. 5 + (-5) ergibt binär 1 0000 0000 – das neunte Bit fällt aus dem Byte heraus, übrig bleibt 0.

BCD: Dezimalziffern in Binärform

Beim BCD-Code (binary coded decimal) bekommt jede Dezimalziffer ihr eigenes Nibble. Die Zahl 59 wird also nicht als 0011 1011 (= 59 binär) gespeichert, sondern als 0101 1001 – links die 5, rechts die 9. In Hex sieht das aus wie 0x59, die Werte A bis F kommen nicht vor.

Das verschenkt etwas Speicher, erspart aber die Umrechnung bei der Anzeige. Du triffst BCD bei Echtzeituhren wie dem DS1307 oder DS3231 (Sekunden, Minuten und Stunden stehen als BCD in den Registern), bei Siebensegment-Decodern wie dem 74HC4511 und bei BCD-Zählern.

Wie sich Zweierpotenzen auch bei Speichergrößen bemerkbar machen, zeigen die Binärvorsätze KiB und MiB im Artikel Einheitenvorsätze. Die passenden Gatter und Zähler-ICs findest du unter Digitale Schaltzeichen und Logikfamilien.

Selbsttest

Welchen Dezimalwert hat 0b1001 0110?

128 + 16 + 4 + 2 = 150.

Wie lautet 0xB4 binär und dezimal?

B = 1011, 4 = 0100, also 0b1011 0100; dezimal 11 · 16 + 4 = 180.

Wie viele Stufen hat ein 14-Bit-Wandler?

214 = 16 384 Stufen, Werte von 0 bis 16 383.

Ein vorzeichenbehaftetes Byte enthält 0xFE. Welche Zahl ist gemeint?

Bits umkehren ergibt 0000 0001, plus 1 ergibt 2 – der Wert ist −2.

Eine Echtzeituhr liefert für die Minuten das Byte 0x37. Wie spät ist es?

37 Minuten – das Register ist BCD-codiert, jede Hex-Ziffer ist direkt eine Dezimalziffer.