Hexadezimal
Das Hexadezimal-Zahlensystem ist ein Stellenwertsystem auf der Basis 16.
Allgemein[Bearbeiten | Quelltext bearbeiten]
Das Hexadezimal-Zahlensystem ist ein Stellenwertsystem auf der Basis 16. Die zehn Ziffern unseres Dezimalsystems (0 bis 9) reichen daher nicht aus und werden ergänzt durch die Buchstaben A bis F für die Dezimalwerte 10 bis 15. Je vier Ziffern des Dualsystems lassen sich nun durch eine einzige Ziffer des Hexadezimalsystems darstellen und letzteres ist deshalb eine leicht erlernbare Kurzschreibweise für binäre Zahlen (Halbbyte oder Nibble, siehe auch Byte). Die Hexadezimalschreibweise wird oft in maschinennahen Programmiersprachen z.B. Assembler genutzt, um Speicheradressen bzw. Speicherinhalte zu bezeichnen.
Um Hexadezimalzahlen besser von Dezimalzahlen zu unterscheiden, wird ihnen oft ein "h", "&h" oder "0x" voran- oder nachgestellt. Im C64-Bereich verwendet man stattdessen ein vorangestelltes Dollarzeichen ("$"). Unter mathematischen Aspekten wird einer Hexadezimalzahl kleingestellt (16) angefügt.
Beispiel: dez. 123 = bin. 01111011 = $7B = &h7B = 7Bh = 0x7B = 7B16.
Der Vorteil der Hexadezimaldarstellung im Zusammenhang mit Computern ist, dass aus Sicht des Computers aufgrund der benutzten Binärcodierung "gerade" Zahlen wie z.B. 100000000(2) in Dezimaldarstellung recht "krumm" sind (256(10) in diesem Fall), während die gleichen Zahlen dargestellt als Hexadezimalzahl relativ lesbar bleiben (100(16) in diesem Fall), was z.B. bei einem Blick in den Speicherbelegungsplan des C64 sofort auffällt.
Umrechnungstabelle[Bearbeiten | Quelltext bearbeiten]
Hexadezimalzahl | Dualzahl
(als Nibble) |
Dezimalzahl |
---|---|---|
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 |
A | 1010 | 10 |
B | 1011 | 11 |
C | 1100 | 12 |
D | 1101 | 13 |
E | 1110 | 14 |
F | 1111 | 15 |
Umrechnungen[Bearbeiten | Quelltext bearbeiten]
Für Programmierer interessant sind Umrechnungsmethoden, d.h. wie lässt sich eine Hexadezimalzahl in eine Dezimalzahl umwandeln bzw. welche Dezimalzahl ergibt sich aus einer gegebenen Hexadezimalzahl.
Hexadezimal- in Dezimalzahl[Bearbeiten | Quelltext bearbeiten]
Als Beispiel nehmen wir die Dualzahl 9F
Als Vorleistung muss F als 15 in die folgende Formel eingebaut werden:
PRINT "DEZIMALZAHL: "9*16↑1+15*16↑0
Und die Bildschirmausgabe sagt: DEZIMALZAHL: 159
Als BASIC-Programm:
10 n$="0123456789abcdef" 20 input "hexadezimalzahl:";a$ 30 for i=len(a$) to 1 step -1 40 b$=b$+mid$(a$,i,1) 50 next i 60 for i=1 to len(b$) 70 for j=1 to 16 80 if mid$(b$,i,1)=mid$(n$,j,1) then n=n+((j-1)*16^(i-1)) 90 next j 100 next i 110 print n 120 end
Dezimal- in Hexadezimal[Bearbeiten | Quelltext bearbeiten]
Die Umwandlung von dezimal in hexadezimal ist etwas schwieriger. Eine einfache Methode ist die Divisionsmethode. Die Dezimalzahl wird hierbei solange durch die Basis 16 geteilt bis das Ergebnis 0 ist, wobei jeweils der Rest notiert wird, der umgekehrt gelesen die Hexadezimalzahl ergibt. Zusätzlich ist zu beachten, dass die Reste 10 bis 15 in die Hexziffern A bis F umgewandelt werden müssen.
159 : 16 = 9 Rest ..15 (=F) 009 : 16 = 0 Rest ...9 ----------------------- Ergibt Hexadezimal: 9F
Das ganze als BASIC-Programm:
10 PRINT "=== DEZIMAL IN HEXADEZIMAL ===" 20 INPUT "EINE DEZIMALZAHL:";A$ 30 A = ABS(VAL(A$)) 40 B = INT(A/16) 50 A = A - (B*16) 60 IF A=10 THEN C$ = "A" + C$ 70 IF A=11 THEN C$ = "B" + C$ 80 IF A=12 THEN C$ = "C" + C$ 90 IF A=13 THEN C$ = "D" + C$ 100 IF A=14 THEN C$ = "E" + C$ 110 IF A=15 THEN C$ = "F" + C$ 120 IF A<10 THEN C$ = MID$(STR$(A),2,1) + C$ 130 A = B : IF B<>0 THEN 40 140 PRINT "HEXADEZIMAL:";C$
Anmerkung: Die Zeichenkette C$ wird von der letzten zur ersten Stelle aufgebaut.
Dualzahl in Hexadezimal[Bearbeiten | Quelltext bearbeiten]
Lange Dualzahlen werden einfach von rechts nach links in 4 Bit-Einheiten zerteilt. Daraus lassen sich anhand der o.g. Tabelle schnell die Hexadezimalzahlen ablesen:
1011.0010.1100.1001 entspricht B2C9
Hexadezimal in Dualzahl[Bearbeiten | Quelltext bearbeiten]
Da jeweils eine Hexadezimalzahlenstelle aus 4 Bits besteht, können durch o.g. Tabelle schnell Hexadezimal- in Dualzahlen umgewandelt werden:
F3A6 entspricht 1111.0011.1010.0110
Weblinks[Bearbeiten | Quelltext bearbeiten]
Wikipedia: Hexadezimalsystem |