Login

Zahlensysteme verstehen: Dezimal, Binär und Hexadezimal im Vergleich

Mario ·

In einer Webseite steht die Farbe #FF8800. In einem Netzwerk hat die Netzwerkkarte die Adresse 00:1A:2B:3C:4D:5E. Und bei einem Absturz meldet Windows einen Fehlercode wie 0x80070005. Alles sind Zahlen, und keine davon sieht aus wie eine normale Zahl. Der Grund: Sie sind im Hexadezimalsystem geschrieben.

Im Beitrag Binärsystem verstehen haben wir gesehen, wie ein Computer intern zählt. Hier schauen wir uns an, warum es daneben weitere Zahlensysteme gibt und wie du zwischen ihnen wechselst.

Alle Zahlensysteme folgen demselben Prinzip

Jedes dieser Systeme ist ein Stellenwertsystem. Es hat eine Basis, und die Basis bestimmt zwei Dinge: wie viele Ziffern es gibt und welche Werte die Stellen haben. Beim Dezimalsystem mit Basis 10 gibt es zehn Ziffern, die Stellen sind Potenzen von 10. Beim Binärsystem mit Basis 2 gibt es zwei Ziffern und Potenzen von 2.

System Basis Ziffern Typische Verwendung
Dezimal 10 0 bis 9 Alltag, Rechnen
Binär 2 0 und 1 Interne Darstellung im Computer, Netzmasken
Oktal 8 0 bis 7 Dateirechte unter Linux
Hexadezimal 16 0 bis 9 und A bis F Farbwerte, MAC-Adressen, IPv6, Speicheradressen, Fehlercodes

Beim Hexadezimalsystem reichen die zehn Ziffern 0 bis 9 nicht aus, es braucht 16 Symbole. Deshalb stehen die Buchstaben A bis F für die Werte 10 bis 15. A ist 10, B ist 11, C ist 12, D ist 13, E ist 14 und F ist 15.

Warum nutzt man überhaupt Hexadezimal?

Binärzahlen sind für Menschen mühsam. Eine Bitfolge wie 111111111000100000000000 kannst du kaum lesen, geschweige denn abtippen, ohne dich zu verzählen. Dezimalzahlen sind kompakt, passen aber nicht gut zu den Bits, weil sich die Stellen nicht sauber aufeinander abbilden lassen.

Das Hexadezimalsystem löst beides. Eine Hexadezimalziffer hat 16 mögliche Werte, und 16 ist 24. Genau vier Bit bilden damit eine Hexadezimalziffer ab. Ein Byte mit 8 Bit lässt sich folglich immer mit zwei Hexadezimalziffern schreiben. So bleiben lange Bitfolgen kurz und lesbar, und die Umrechnung bleibt trotzdem einfach.

Dezimal Binär (4 Bit) Hexadezimal
000000
100011
200102
300113
401004
501015
601106
701117
810008
910019
101010A
111011B
121100C
131101D
141110E
151111F

Diese Tabelle ist das Herzstück dieses Beitrags. Wenn du sie oder zumindest die Zeilen 8 bis 15 sicher im Kopf hast, fallen dir fast alle Umrechnungen leicht.

Ein Byte besteht aus zwei Nibbles, jedes Nibble wird durch eine Hexadezimalziffer dargestellt.

Schreibweisen: Woran erkennst du ein Hexadezimalsystem?

Die Zahl 10 kann zwei, zehn oder sechzehn bedeuten, je nachdem, in welchem System sie steht. Damit nichts durcheinandergerät, gibt es Konventionen:

  • 0x1F – das Präfix 0x kennzeichnet Hexadezimalzahlen, besonders in der Programmierung.
  • #FF8800 – in Webdesign und CSS steht die Raute für einen Hexadezimalwert.
  • 1Fh – das angehängte h findest du häufig in älterer Technikliteratur.
  • In Lehrbüchern und Prüfungen wird oft die Basis tiefgestellt: 1F16, 1012.

Groß- oder Kleinschreibung der Buchstaben spielt keine Rolle. FF und ff sind dieselbe Zahl.

Hexadezimal in Dezimal umrechnen

Das Vorgehen ist dasselbe wie beim Binärsystem, nur sind die Stellenwerte jetzt Potenzen von 16:

Stelle (von rechts) 3 2 1 0
Potenz 16³ 16² 16¹ 16⁰
Stellenwert 4096 256 16 1

Du ersetzt die Buchstaben durch ihre Werte, multiplizierst jede Ziffer mit dem Stellenwert und addierst. Zwei Beispiele:

0x2F  = 2 × 16 + 15 × 1
      = 32 + 15
      = 47

0x1A3 = 1 × 256 + 10 × 16 + 3 × 1
      = 256 + 160 + 3
      = 419

Besonders merkenswert ist 0xFF. Das sind 15 × 16 + 15 = 255, also der größte Wert, den ein Byte darstellen kann.

Dezimal in Hexadezimal umrechnen

Hier teilst du wiederholt durch 16 und notierst die Reste, genau wie beim Umrechnen ins Binärsystem durch 2. Die Reste größer als 9 schreibst du als Buchstaben. Am Ende liest du sie von unten nach oben.

Beispiel: Die Zahl 500.

500 ÷ 16 = 31 Rest  4
 31 ÷ 16 =  1 Rest 15  → F
  1 ÷ 16 =  0 Rest  1

Von unten nach oben gelesen: 1F4

Zur Kontrolle rechnest du zurück: 1 × 256 + 15 × 16 + 4 = 256 + 240 + 4 = 500.

Binär und Hexadezimal ineinander umwandeln

Das ist der eigentliche Grund, warum Hexadezimal so beliebt ist. Du musst nicht über das Dezimalsystem gehen, sondern nutzt die Gruppen zu je 4 Bit.

Von Binär nach Hexadezimal

Du teilst die Bitfolge von rechts in Vierergruppen und übersetzt jede Gruppe einzeln mit der Tabelle von oben.

11010110
→ 1101 | 0110
→   D  |   6
= D6

Ist die Zahl der Stellen nicht durch 4 teilbar, füllst du links mit Nullen auf:

101101
→ 0010 | 1101
→   2  |   D
= 2D

Das Auffüllen links ändert den Wert nicht, wie bei 007 und 7 im Dezimalsystem. Wichtig ist, dass du von rechts gruppierst. Wer von links beginnt, erhält eine falsche Zahl.

Von Hexadezimal nach Binär

Der Weg ist umgekehrt: Jede Hexadezimalziffer wird durch ihre vier Bit ersetzt.

0x3A
→ 3    | A
→ 0011 | 1010
= 00111010

Beispiele aus der Praxis

Farbwerte im Web

Eine Farbe wie #FF8800 besteht aus drei Bytes, geschrieben als je zwei Hexadezimalziffern: Rot, Grün und Blau. Jedes Byte reicht von 0 bis 255.

FF = 255  (Rot)
88 = 136  (Grün)
00 =   0  (Blau)

Die Rechnung für 88: 8 × 16 + 8 = 136. Die Farbe hat also viel Rot, mittleres Grün und kein Blau, das Ergebnis ist ein kräftiges Orange. Das kannst du in einem Bildbearbeitungsprogramm oder einer CSS-Datei selbst ausprobieren.

Der Farbcode #FF8800 besteht aus drei Bytes für Rot, Grün und Blau.

MAC-Adressen und IPv6

Eine MAC-Adresse hat 48 Bit. In Hexadezimal sind das 12 Ziffern, meist in sechs Blöcken zu je einem Byte geschrieben, zum Beispiel 00:1A:2B:3C:4D:5E. Die ersten drei Bytes kennzeichnen den Hersteller der Netzwerkkarte.

Auch IPv6-Adressen sind hexadezimal. Sie haben 128 Bit, also 32 Hexadezimalziffern, aufgeteilt in acht Blöcke zu je 16 Bit. Ein Beispiel aus dem für Dokumentation reservierten Bereich: 2001:0db8:0000:0000:0000:0000:0000:0001. In Binär wäre das eine Kette aus 128 Nullen und Einsen, in Hexadezimal bleibt es überschaubar. Beide Adressarten kommen in der Netzwerk-Reihe später ausführlich dran.

Oktalsystem und Dateirechte unter Linux

Das Oktalsystem mit Basis 8 siehst du heute vor allem bei Dateirechten unter Linux. Eine Oktalziffer entspricht 3 Bit. Mit dem Befehl chmod setzt du Rechte:

chmod 755 skript.sh

Der Befehl legt fest, wer die Datei skript.sh lesen (r), schreiben (w) und ausführen (x) darf. Jede der drei Ziffern gilt für eine Gruppe: Besitzer, Gruppe und alle anderen. Die Zahl setzt sich aus den Werten r = 4, w = 2 und x = 1 zusammen:

  • 7 = 4 + 2 + 1 → Lesen, Schreiben, Ausführen (rwx) für den Besitzer
  • 5 = 4 + 1 → Lesen und Ausführen (r-x) für die Gruppe
  • 5 = 4 + 1 → Lesen und Ausführen (r-x) für alle anderen

Binär sähe das so aus: 111 101 101. Genau dieser Dreiergruppen-Aufbau macht Oktal an dieser Stelle praktisch.

Umrechnen mit Werkzeugen

Zur Kontrolle deiner Ergebnisse gibt es den Windows-Rechner im Modus „Programmierer“. Die PowerShell kann es ebenfalls. Dieser Befehl wandelt die Dezimalzahl 500 in Hexadezimal um:

[Convert]::ToString(500, 16)

Die 16 am Ende ist die Zielbasis. Das Ergebnis lautet 1f4 in Kleinbuchstaben. Umgekehrt wandelt der nächste Befehl die Hexadezimalzahl 1F4 in Dezimal um:

[Convert]::ToInt32("1F4", 16)

Das Ergebnis ist 500. Unter Linux erledigt der Befehl printf dasselbe:

printf '%x\n' 500
printf '%d\n' 0x1F4

Die erste Zeile gibt 1f4 aus, die zweite 500. Das Zeichen %x steht für Hexadezimal, %d für Dezimal.

Typische Fehler

  • Buchstaben wie Dezimalzahlen behandeln: A bis F stehen für 10 bis 15. Beim Rechnen musst du sie zuerst ersetzen.
  • Gruppierung von links statt von rechts: Bei der Umwandlung von Binär nach Hexadezimal fängst du rechts an.
  • 0x10 für zehn halten: Hexadezimal 10 ist sechzehn. Die Zehn schreibt sich A.
  • Basis vergessen: Ohne Präfix oder tiefgestellte Basis lässt sich nicht erkennen, in welchem System eine Zahl steht.
  • Größten Wert falsch bestimmt: Pro Hexadezimalstelle ist F der größte Wert, also 15 und nicht 16.

Zum Üben

  1. Wandle 0xB7 in eine Dezimalzahl um.
  2. Wandle die Dezimalzahl 255 in Hexadezimal um.
  3. Wandle 10101100 in Hexadezimal um.
  4. Wandle 0x4E in Binär um.
  5. Wandle die Dezimalzahl 1000 in Hexadezimal um.

Lösungen: (1) 11 × 16 + 7 = 183. (2) FF. (3) 1010 | 1100 = AC. (4) 4 = 0100, E = 1110, also 01001110. (5) 1000 ÷ 16 = 62 Rest 8, 62 ÷ 16 = 3 Rest 14 (E), 3 ÷ 16 = 0 Rest 3, von unten nach oben also 3E8.

Das solltest du dir merken

  • Alle Zahlensysteme sind Stellenwertsysteme mit einer Basis: 10, 2, 8 oder 16.
  • Hexadezimal nutzt die Ziffern 0 bis 9 und A bis F, wobei A bis F die Werte 10 bis 15 bedeuten.
  • Eine Hexadezimalziffer entspricht genau 4 Bit, ein Byte also zwei Hexadezimalziffern.
  • Binär und Hexadezimal wandelst du über Vierergruppen von rechts ineinander um.
  • Hexadezimalzahlen erkennst du an Präfixen wie 0x oder #, oder an einer tiefgestellten 16.
  • Oktal ist heute vor allem bei Linux-Dateirechten wichtig.

Damit sind die Grundlagen zu Daten und Zahlen abgeschlossen. Im nächsten Block geht es um Elektrotechnik, und wir beginnen mit dem, was in jedem Kabel steckt: Elektrische Grundgrößen: Spannung, Strom und Widerstand.

Weiterlesen