Hexadezimal

Aus C64-Wiki
Zur Navigation springenZur Suche springen

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]

WP-W11.png Wikipedia: Hexadezimalsystem