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:
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.
| System | Basis | Ziffern | Stellengewichte | Schreibweise im Code |
|---|---|---|---|---|
| Dezimal | 10 | 0 … 9 | 1, 10, 100, 1000 … | 200 |
| Binär (dual) | 2 | 0, 1 | 1, 2, 4, 8, 16 … | 0b11001000 |
| Hexadezimal | 16 | 0 … 9, A … F | 1, 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₁₆).
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:
| Bits | Werte | Bereich (ohne Vorzeichen) | typisch |
|---|---|---|---|
| 4 | 16 | 0 … 15 | eine Hex-Ziffer, BCD-Stelle |
| 8 | 256 | 0 … 255 | Byte, PWM-Wert bei 8 Bit |
| 10 | 1024 | 0 … 1023 | ADC eines Arduino Uno |
| 12 | 4096 | 0 … 4095 | ADC eines ESP32 oder STM32 |
| 16 | 65 536 | 0 … 65 535 | 16-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.
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.
| Hex | Binär | Hex | Binär | Hex | Binär | Hex | Binär |
|---|---|---|---|---|---|---|---|
| 0 | 0000 | 4 | 0100 | 8 | 1000 | C | 1100 |
| 1 | 0001 | 5 | 0101 | 9 | 1001 | D | 1101 |
| 2 | 0010 | 6 | 0110 | A | 1010 | E | 1110 |
| 3 | 0011 | 7 | 0111 | B | 1011 | F | 1111 |
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.
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.
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.