Hexadezimal

aus RHWiki, der freien Romhacking-Enzyklopädie

Inhaltsverzeichnis

Was ist Hexadezimal?

Hexadezimal ist in der Computerbranche das bevorzugte Zahlenformat, da es eine einfache und übersichtliche Darstellung von Bits und Bytes erlaubt. (Anmerkung: Mittlerweile wird für mathematische Zwecke, bei denen es auf hohe Genauigkeit ankommt, mit Dezimalzahlen auf BCD-Ebene gerechnet. Das ist aber für's RH wenig interessant.)

Hexadezimal ist wie das Dezimalsystem ein Zahlensystem. Im Gegensatz zum Dezimalsystem (Basis = 10) wird beim Hexadezimalsystem mit der Basis 16 gerechnet. (Wichtig: die Basen 10 und 16 sind in Dezimal angegeben; wollte man die Basis des Hexadezimalsystems (=16 dez) in Hexadezimal angeben, wäre es 10 hex (nicht verwechseln mit 10 (dez))!)

Das bedeutet im Klartext, dass eine Ziffer Werte von 0 bis 15 (also insgesamt 16 Werte) annehmen kann. Da es für die Ziffern von 10 bis 15 keine Zahlen mehr gibt (0-9 sind schon verbraucht) verwendet man die Buchstaben A bis F:

Hex Dez
0 =  0
1 =  1
2 =  2
3 =  3
4 =  4
5 =  5
6 =  6
7 =  7
8 =  8
9 =  9
A = 10
B = 11
C = 12
D = 13
E = 14
F = 15

Auf diese Weise lassen sich auch größere Zahlen in Hexadezimal übersichtlich darstellen, z.B. A90C4FE (entspricht 177259774 in Dezimalschreibweise).

Umrechnung

Für den normalen Anwender empfielt es sich, größere Zahlen mit einem Taschenrechner umzurechnen und nur kleinere Zahlen (bis 400 Hex) im Kopf zu rechnen. Als Taschenrechner ist der Windows(R)-Taschenrechner "calc.exe" zu empfehlen (Start->Ausführen->"calc"). Diesen kann man bei "Ansicht" auf "Wissenschaftlich" stellen und dann mit Hilfe der Optionsfelder "Hex" und "Dez" zwischen den Systemen umrechnen. (Eingangsformat auswählen -> Zahl eingeben -> Ausgangsformat auswählen; evtl vorher '=' drücken damit er die Zahl annimmt.)

Für den technisch Interessierten sind im folgenden Hand-Umrechnungsmethoden für größere Zahlen aufgeführt.

Umrechnung Hex nach Dez

Hier muss man einfach nur jede Ziffer mit ihrem Stellenwert multiplizieren. Die Stellenwerte nehmen in einer Zahl von rechts nach links pro Ziffer je um den Faktor 16 (=Basis) zu. D.h. die Ziffer ganz rechts hat den Stellenwert 1, die links davon 16, links davon 256 usw. Diese Stellenwerte werden häufig auch als Potenzen zur Basis 16 angegeben: von rechts nach links 16^0 (=1), 16^1 (=16) usw.

Beispiel:
A90C4FE (Hex)
= (10 * 16^6) + (9 * 16^5) + (0 * 16^4) + (12 * 16^3) + (4 * 16^2) + (15 * 16^1) + (14 * 16^0)
= (10 * 16777216) + (9 * 1048576) + (12 * 4096) + (4 * 256) + (15 * 16) + (14 * 1)
= 167772160 + 9437184 + 49152 + 1024 + 240 + 14
= 177259774
(Dieses Ergebnis bestätigt uns der Taschenrechner)

Umrechnung Dez nach Hex

Um eine dezimale Zahl ins Hexadezimalsystem umzurechnen, dividiert man solange durch 16, bis man 0 hat. Die Reste (Modulus) bilden dabei von rechts nach links geschrieben das Hexadezimale Ergebnis.

Beispiel: 177259774

Rechnung in Dezimal               | Reste in Hex
----------------------------------+--------------
177259774 / 16 = 11078735 Rest 14 =       E
 11078735 / 16 =   692420 Rest 15 =      F|
   692420 / 16 =    43276 Rest  4 =     4 |
    43276 / 16 =     2704 Rest 12 =    C  |
     2704 / 16 =      169 Rest  0 =   0   |
      169 / 16 =       10 Rest  9 =  9    |
       10 / 16 =        0 Rest 10 = A     |
----------------------------------+-------+-----
                          Ergebnis: A90C4FE (Hex)

(kleiner Tipp: der Rest, also hinter dem Komma, wird mit 16 multipliziert um auf den Wert in Hex zu kommen.) Es gibt durchaus noch weitere Umrechnungsmethoden, aber die obigen sind wohl die gängigsten.

Anwendung

Das hexadezimale Zahlensystem wird hauptsächlich im Computerbereich verwendet, da die hexadezimale Darstellung sehr hardwarenah ist (in der Hardware werden Bits verwendet) und eine Umrechnung ins Dualsystem ("Bit"-System) sehr einfach ist.

Daher werden auch in einem Hexeditor die Bytes in hexadezimal angezeigt.

Darstellung

In Programmiersprachen und Fachdiskussionen werden hexadezimale Zahlen in verschiedenen Weisen gekennzeichnet. Überwiegend durch Zusatz eines der Präfixe "0x" (C/C++), "$" (Pascal), "&H" (Visual Basic) oder durch das Suffix "h" (Assembler). Manchmal wird auch explizit darauf hingewiesen, dass hexadezimale Zahlen verwendet werden und die Zahlen selbst sind nicht weiter gekennzeichnet.

Beispiel:
138334h (Assembler) = 0x138334 (C / C++) = $138334 (Pascal) = &H138334 (VB) = 138334 (hex) = 1278772 (dez)

In VB muss man aufpassen, da Werte zwischen &H8000 und &HFFFF als vorzeichenbehaftete Integer betrachtet werden. So ist z.B. "&HFFFF = -1". Durch Verwendung des Suffixes '&' lässt sich ein Wert als Long interpretieren, sodass man z.B. mit &HFFFF& den Absolutwert 65535 erhält.

In Einzelfällen wird auch bei Zahlen, die hexadezimale Ziffern (A-F) enthalten, auf jede Kennzeichnung verzichtet, da durch das Vorhandensein dieser Ziffern bereits klar sein sollte, dass eine Zahl hexadezimal ist. (Es könnte auch eine Zahl zu einer anderen Basis >16 sein, aber das wollen wir hier mal außen vor lassen...)

Siehe auch

Andere Sprachen