Logo Wissenstransfer Gerhard at CichnaDotCom

>> Wissensdatenbank / Mathematik / Mathematik Grundlagen I

Zahlensysteme

Hexadezimalsystem

Neben dem Binärsystem kommt auch dem sogenannten Hexadezimalsystem in der Informatik eine große Bedeutung zu. Dieses System wird in der digitalen Datenverarbeitung häufig verwendet, weil es eine komfortable Darstellung von Binärzahlen erlaubt. Zur Darstellung kommen im Hexadezimalsystem sechzehn verschiedene Ziffern vor: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Die Darstellung von Hexadezimalzahlen erfolgt demnach zur Basis 16.

Zahlen werden im Hexadezimalsystem dargestellt durch \[h_m h_{m-1} \dots h_1 h_0, h_{-1} h_{-2} \dots h_{-n}\] mit \(m, n \in \mathbb{N}\) und \(h_i \in \{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F\}, -n \leq i \leq m\). Genau wie bei den Binärzahlen gibt es auch hier kein führendes Vorzeichen. Der Index \(i\) gibt den Stellenwert der jeweiligen Ziffer \(h_i\) an. Die Wertigkeit jeder Ziffer ist nun eine Sechzehnerpotenz \(16^i\).

Entsprechend bestimmt sich der (dezimale) Wert h einer Hexadezimalzahl aus der Summe von Potenzen der Basis 16. Die Ziffern vor dem Komma werden entsprechend mit Sechzehnerpotenzen mit nichtnegativen Exponenten und die Ziffern hinter dem Komma mit Sechzehnerpotenzen mit negativen Exponenten multipliziert und aufsummiert. Hierbei stehen die Ziffern A bis F für die Faktoren 10 bis 15. Der Wert einer Hexadezimalzahl lässt sich somit wie folgt berechnen: \[h = \sum\limits_{i = -n}^{m}{h_i \cdot 16^i}\]

Um anzuzeigen, dass es sich um eine Zahl in Hexadezimalnotation handelt, verwenden wir als tiefgestellten Index eine 16, also beispielsweise \(A3_{16}\) oder \(2F_{16}\). In der Informatik - insbesondere bei der Programmierung von Softwaresystemen - nutzt man häufig auch noch eine äquivalente Schreibweise: Statt des tiefgestellten Index ergänzt man die Zahl um das Präfix \(0x\) und schreibt dann z.B. \(A3_{16}\) als 0xA3 oder \(2F_{16}\) als 0x2F.

Der Zusammenhang zum Binärsystem ergibt sich folgendermaßen: Die Basis des Hexadezimalsystems ist die vierte Zweierpotenz \(2^4 = 16\). Ein Nibble, also 4 Bits einer Binärzahl, können genau \(2^4\) Zustände darstellen. Somit kann mit einer hexadezimalen Ziffer immer genau ein Nibble dargestellt werden. Ein Byte kann demnach durch zwei Hexadezimalziffern repräsentiert werden. Die folgende Tablle verdeutlicht diesen Zusammenhang.

Darstellung von Zahlen im Dezimal-, Binär- und Hexadezimalsystem
Dezimal Binär Hexadezimal
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F

Beispiel: Hexadezimalsystem

\[43_{16} = 4 \cdot 16^1 + 3 \cdot 16^0\] \[= 64 + 3\] \[= 67_{10}\]


\[2F_{16} = 2 \cdot 16^1 + 15 \cdot 16^0\] \[= 32 + 15\] \[= 47_{10}\]


\[ED_{16} = 14 \cdot 16^1 + 13 \cdot 16^0\] \[= 224 + 13\] \[= 237_{10}\]


\[B7A5_{16} = 11 \cdot 16^3 + 7 \cdot 16^2 + 10 \cdot 16^1 + 5 \cdot 16^0\] \[= 45056 + 1792 + 160 + 5\] \[= 47013_{10}\]

Betrachten wir abschließend noch einmal kurz den Zusammenhang zwischen dem Binär- und dem Hexadezimalsystem. Der (dezimale) Wert der Zahl \(A3_{16}\) ergibt sich aus \[A3_{16} = 10 \cdot 16^1 + 3 \cdot 16^0\] \[= 160 + 3\] \[= 163_{10}\]

Schreiben wir \(163_{10}\) als Binärzahl, erhalten wir \(1010\:0011_2\). Der Zusammenhang zwischen dem Binärsystem und dem Hexadezimalsystem wird deutlich, wenn wir die einzelnen Nibbles betrachten: Es ist \(1010_2 = 10_{10} = A_{16}\) und \(0011_2 = 3_{10} = 3_{16}\). Notiert man diese Werte einfach hintereinander erhält man \(A3_{16}\). Indem man also die Nibbles einer Binärzahl als Hexadezimalzahl schreibt und diese anschließend einfach der Reihe nach aneinanderfügt, kommt man zur Hexadezimaldarstellung einer Binärzahl. Auf diese Weise kann man sehr leicht ohne großen Rechenaufwand auch lange Binärzahlen in das Hexadezimalsystem umwandeln. Genauso einfach geht es in die umgekehrte Richtung: Betrachtet man beispielsweise die Hexadezimalzahl \(F49C_{16}\), dann kann man der Reihe nach von links nach rechts jede Hexadezimalziffer in ein Nibble umwandeln: Es ist \(F_{16} = 1111_2, 4_{16} = 0100_2, 9_{16} = 1001_2\) und \(C_{16} = 1100_2\). Indem man diese Nibbles einfach aneinanderfügt erhält man die Binärdarstellung dieser Zahl als \(1111\:0100\:1001\:1100_2\).