Hexadezimalsystem

Aus besserwiki.de

In der Mathematik und Informatik ist das hexadezimale (auch Basis 16 oder einfach Hex) Zahlensystem ein Positionszahlensystem, das Zahlen mit einer Basis von 16 darstellt. Im Gegensatz zum Dezimalsystem, das Zahlen mit 10 Symbolen darstellt, verwendet das Hexadezimalsystem 16 verschiedene Symbole, meist die Symbole "0"-"9" für die Werte 0 bis 9 und "A"-"F" (oder alternativ "a"-"f") für die Werte von 10 bis 15.

Softwareentwickler und Systemdesigner verwenden häufig hexadezimale Zahlen, da sie eine menschenfreundliche Darstellung von binär codierten Werten bieten. Jede Hexadezimalziffer steht für vier Bits (Binärziffern), die auch als Nibble (oder Nybble) bezeichnet werden. Ein 8-Bit-Byte kann beispielsweise Werte von 00000000 bis 11111111 in binärer Form haben, die in hexadezimaler Form bequem als 00 bis FF dargestellt werden können.

In der Mathematik wird in der Regel ein tiefgestelltes Zeichen verwendet, um die Basis anzugeben. So wird beispielsweise der Dezimalwert 23.945 in Hexadezimalzahlen als 5D8916 ausgedrückt. In der Programmierung gibt es eine Reihe von Bezeichnungen für hexadezimale Zahlen, die in der Regel ein Präfix enthalten. Das Präfix 0x wird in C verwendet, was diesen Wert als 0x5D89 bezeichnen würde.

Hexadezimal wird in der Übertragungskodierung Base16 verwendet, bei der jedes Byte des Klartextes in zwei 4-Bit-Werte aufgeteilt und durch zwei Hexadezimalziffern dargestellt wird.

Hexadezimalziffern,
binär und dezimal:
Hex. Dualsystem Dez.
0 0 0 0 0 00
1 0 0 0 1 01
2 0 0 1 0 02
3 0 0 1 1 03
4 0 1 0 0 04
5 0 1 0 1 05
6 0 1 1 0 06
7 0 1 1 1 07
8 1 0 0 0 08
9 1 0 0 1 09
A 1 0 1 0 10
B 1 0 1 1 11
C 1 1 0 0 12
D 1 1 0 1 13
E 1 1 1 0 14
F 1 1 1 1 15

In den 1960er und 1970er Jahren wurde in der Informatik häufig auch das Oktalsystem mit seiner Basis als dritte Zweierpotenz (8 = 23) verwendet, da es mit den üblichen Ziffern von 0 bis 7 auskommt. Es findet aber heute seltener Anwendung, beispielsweise zur Darstellung von Zeichen in der Programmiersprache C. Auch gibt es noch weitere Zahlensysteme mit verschiedenen Basiswerten.

Wir sind es gewohnt, im Dezimalsystem zu rechnen. Das bedeutet, unser indo-arabisches Zahlensystem verwendet zehn Symbole zur Notation der Ziffern (0 bis 9). Das Hexadezimalsystem enthält dagegen sechzehn Ziffern. Seit Mitte der 1950er Jahre werden zur Darstellung der sechs zusätzlichen Ziffern die Buchstaben A bis F oder a bis f als Zahlzeichen verwendet. Dies geht auf die damalige Praxis der IBM-Informatiker zurück.

Darstellung

Schriftliche Darstellung

In den meisten aktuellen Anwendungsfällen stehen die Buchstaben A-F oder a-f für die Werte 10-15, während die Ziffern 0-9 für die dezimalen Werte verwendet werden.

Es gibt keine allgemeingültige Konvention für die Verwendung von Klein- oder Großbuchstaben, so dass in bestimmten Umgebungen aufgrund von Gemeinschaftsstandards oder -konventionen beide Varianten vorherrschen oder bevorzugt werden; auch gemischte Großschreibung wird verwendet. Sieben-Segment-Anzeigen verwenden die gemischte Großschreibung AbCdEF, um Ziffern zu erzeugen, die voneinander unterschieden werden können.

Es gibt eine gewisse Standardisierung für die Verwendung von Leerzeichen (anstelle von Kommas oder anderen Satzzeichen) zur Trennung von Hex-Werten in einer langen Liste. Im folgenden Hex-Dump ist beispielsweise jedes 8-Bit-Byte eine zweistellige Hex-Zahl mit Leerzeichen dazwischen, während der 32-Bit-Offset am Anfang eine 8-stellige Hex-Zahl ist.

00000000 57 69 6b 69 70 65 64 69 61 2c 20 74 68 65 20 66  
00000010 72 65 65 20 65 6e 63 79 63 6c 6f 70 65 64 69 61  
00000020 20 74 68 61 74 20 61 6e 79 6f 6e 65 20 63 61 6e 
00000030 20 65 64 69 74 0a <span title="Aus: Englische Wikipedia, Abschnitt &quot;Written representation&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/Hexadecimal#Written_representation <span style="color:#dddddd">ⓘ</span>]</span>

Unterscheidung von Dezimalzahlen

In Kontexten, in denen die Basis nicht klar ist, können Hexadezimalzahlen mehrdeutig sein und mit Zahlen verwechselt werden, die in anderen Basen ausgedrückt sind. Es gibt mehrere Konventionen zur eindeutigen Darstellung von Werten. Eine tiefgestellte Zahl (selbst in Dezimalzahlen geschrieben) kann die Basis explizit angeben: 15910 ist dezimal 159; 15916 ist hexadezimal 159, was 34510 entspricht. Einige Autoren bevorzugen einen tiefgestellten Text, z. B. 159dezimal und 159hex, oder 159d und 159h.

Donald Knuth hat in seinem Buch The TeXbook die Verwendung einer bestimmten Schriftart zur Darstellung eines bestimmten Radix eingeführt. Hexadezimale Darstellungen werden dort in einer Schreibmaschinen-Schriftart geschrieben: 5A3

In linearen Textsystemen, wie sie in den meisten Computerprogrammierumgebungen verwendet werden, hat sich eine Vielzahl von Methoden herausgebildet:

  • Unix (und verwandte) Shells, AT&T-Assembler und auch die Programmiersprache C (und ihre syntaktischen Abkömmlinge wie C++, C#, Go, D, Java, JavaScript, Python und Windows PowerShell) verwenden das Präfix 0x für numerische Konstanten in Hexadezimalschrift: 0x5A3. Zeichen- und Zeichenkettenkonstanten können mit dem Präfix \x, gefolgt von zwei Hexadezimalziffern, in Hexadezimal ausgedrückt werden: "\x1B" steht für das Steuerzeichen Esc; "\x1B[0m\x1B[25;1H" ist eine Zeichenkette mit 11 Zeichen und zwei eingebetteten Esc-Zeichen. Um eine ganze Zahl mit der printf-Funktionsfamilie als Hexadezimalwert auszugeben, wird der Formatkonvertierungscode %X oder %x verwendet.
  • In URIs (einschließlich URLs) werden Zeichencodes als hexadezimale Paare mit vorangestelltem % geschrieben: http://www.example.com/name%20with%20spaces</nowiki> wobei %20 der Code für das Leerzeichen ist, ASCII-Codepunkt 20 in hex, 32 in dezimal.
  • In XML und XHTML können Zeichen als hexadezimale numerische Zeichenreferenzen mit der Notation &#xcode; ausgedrückt werden, zum Beispiel ’ steht für das Zeichen U+2019 (das rechte einfache Anführungszeichen). Wenn es kein x steht, ist die Zahl dezimal (also ’ ist das gleiche Zeichen).
  • Im Unicode-Standard wird ein Zeichenwert mit U+ gefolgt vom Hexadezimalwert dargestellt, z. B. ist U+20AC das Euro-Zeichen ().
  • Farbreferenzen in HTML, CSS und X Window können mit sechs hexadezimalen Ziffern ausgedrückt werden (jeweils zwei für die roten, grünen und blauen Komponenten, in dieser Reihenfolge), denen ein # vorangestellt wird: Weiß wird beispielsweise als #FFFFFF dargestellt. CSS erlaubt auch 3 hexadezimale Abkürzungen mit einer Hexadezimalziffer pro Komponente: #FA3 verkürzt #FFAA33 (ein goldenes Orange: ).
  • In der MIME-Kodierung (E-Mail-Erweiterungen) mit Anführungszeichen werden die Zeichencodes als Hexadezimalpaare mit vorangestelltem = geschrieben: Espa=F1a ist "España" (F1 ist der Code für ñ im Zeichensatz ISO/IEC 8859-1).
  • In von Intel abgeleiteten Assemblersprachen und Modula-2 wird Hexadezimal mit einem vorangestellten H oder h bezeichnet: FFh oder 05A3H. Einige Implementierungen verlangen eine führende Null, wenn die erste hexadezimale Ziffer keine Dezimalziffer ist, also würde man 0FFh statt FFh schreiben. Einige andere Implementierungen (z. B. NASM) erlauben Zahlen im C-Stil (0x42).
  • Andere Assemblersprachen (6502, Motorola), Pascal, Delphi, einige Versionen von BASIC (Commodore), GameMaker Language, Godot und Forth verwenden $ als Präfix: $5A3.
  • Einige Assembler-Sprachen (Microchip) verwenden die Notation H'ABCD' (für ABCD16). In ähnlicher Weise verwendet Fortran 95 Z'ABCD'.
  • Ada und VHDL schließen hexadezimale Zahlen in "numerische Anführungszeichen" ein: 16#5A3#. Für Bitvektorkonstanten verwendet VHDL die Notation x "5A3".
  • Verilog stellt hexadezimale Konstanten in der Form 8'hFF dar, wobei 8 für die Anzahl der Bits im Wert und FF für die hexadezimale Konstante steht.
  • Die Smalltalk-Sprache verwendet das Präfix 16r: 16r5A3
  • PostScript und die Bourne-Shell und ihre Derivate bezeichnen Hexadezimalzahlen mit dem Präfix 16#: 16#5A3. Bei PostScript können binäre Daten (wie Bildpixel) als aufeinanderfolgende Hexadezimalpaare ohne Präfix ausgedrückt werden: AA213FD51B3801043FBC...
  • Common Lisp verwendet die Präfixe #x und #16r. Das Setzen der Variablen *read-base* und *print-base* auf 16 kann auch verwendet werden, um den Leser und Drucker eines Common Lisp-Systems auf hexadezimale Zahlendarstellung zum Lesen und Drucken von Zahlen umzustellen. So können Hexadezimalzahlen ohne den #x- oder #16r-Präfixcode dargestellt werden, wenn die Eingabe- oder Ausgabebasis auf 16 geändert wurde.
  • MSX BASIC, QuickBASIC, FreeBASIC und Visual Basic stellen hexadezimale Zahlen mit &H vor: &H5A3
  • BBC BASIC und Locomotive BASIC verwenden & für Hex.
  • Die TI-89- und 92-Serien verwenden ein 0h-Präfix: 0h5A3
  • ALGOL 68 verwendet das Präfix 16r zur Bezeichnung von Hexadezimalzahlen: 16r5a3. Binäre, quaternäre (Basis-4) und oktale Zahlen können auf ähnliche Weise angegeben werden.
  • Das gebräuchlichste Format für Hexadezimalzahlen auf IBM-Mainframes (zSeries) und Midrange-Computern (IBM i), auf denen die traditionellen Betriebssysteme (zOS, zVSE, zVM, TPF, IBM i) laufen, ist X'5A3' und wird in Assembler, PL/I, COBOL, JCL, Skripten, Befehlen und anderen Stellen verwendet. Dieses Format war auch auf anderen (und inzwischen veralteten) IBM-Systemen üblich. Gelegentlich wurden Anführungszeichen anstelle von Apostrophen verwendet.
  • Jede IPv6-Adresse kann als acht Gruppen von vier hexadezimalen Ziffern (manchmal auch Hextets genannt) geschrieben werden, wobei jede Gruppe durch einen Doppelpunkt (:) getrennt ist. Dies ist zum Beispiel eine gültige IPv6-Adresse: 2001:0db8:85a3:0000:0000:8a2e:0370:7334 oder abgekürzt durch Entfernen von Nullen als 2001:db8:85a3::8a2e:370:7334 (IPv4-Adressen werden in der Regel in Dezimalzahlen geschrieben).
  • Globale eindeutige Bezeichner werden als zweiunddreißig hexadezimale Ziffern geschrieben, oft in ungleichen, durch Bindestriche getrennten Gruppierungen, z. B. 3F2504E0-4F89-41D3-9A0C-0305E82C3301.

Um hexadezimale von dezimalen Zahlen unterscheiden zu können, existieren mehrere Schreibweisen. Üblicherweise werden hexadezimale Zahlen mit einem Index oder Präfix versehen.

Verbreitete Schreibweisen sind: 7216, 72hex, 72h, 72H, 72H, 0x72, $72, "72 und X'72', wobei das Präfix 0x und das Suffix h insbesondere in der Programmierung und technischen Informatik Verwendung finden. Das Anhängen eines h an die Hex-Zahl ist auch als Intel-Konvention geläufig. Die Schreibweise mit dem Dollar-Präfix ist in Assemblersprachen bestimmter Prozessorfamilien üblich, insbesondere bei Motorola, zum Beispiel beim Motorola 68xx und 68xxx, aber auch beim MOS 65xx; die Schreibweise X'72' ist in der Welt der IBM-Großrechner üblich, wie in REXX.

Der Übersicht dienende Trennpunkte können bei Hexadezimalzahlen alle vier Stellen gesetzt werden, trennen also Gruppen von jeweils sechzehn Bit. Die Bedeutung der 1.000016 = 65.53610 unter den hexadezimalen Zahlen entspricht also jener der 1.00010 unter den dezimalen Zahlen.

Zum Vergleich ein voller Vierundsechzig-Bit-Bus mit und ohne Trennpunkte: FFFF.FFFF.FFFF.FFFF und FFFFFFFFFFFFFFFF

Dezimale Zahlen werden, wo sie nicht der zu erwartende Normalfall sind, indiziert: 11410

Andere Symbole für 10-15 und meist andere Symbolsätze

Die Verwendung der Buchstaben A bis F zur Darstellung der Ziffern über 9 war in der Frühgeschichte der Computer nicht allgemein üblich.

  • In den 1950er Jahren bevorzugten einige Anlagen, wie z. B. Bendix-14, die Verwendung der Ziffern 0 bis 5 mit einem Überstrich, um die Werte 10-15 als 0, 1, 2, 3, 4 und 5 zu bezeichnen.
  • Die Computer SWAC (1950) und Bendix G-15 (1956) verwendeten die Kleinbuchstaben u, v, w, x, y und z für die Werte 10 bis 15.
  • Die Computer ORDVAC und ILLIAC I (1952) (und einige abgeleitete Modelle, z. B. BRLESC) verwendeten die Großbuchstaben K, S, N, J, F und L für die Werte 10 bis 15.
  • Der Librascope LGP-30 (1956) verwendete die Buchstaben F, G, J, K, Q und W für die Werte 10 bis 15.
  • Auf dem PERM-Computer (1956) wurden Hexadezimalzahlen als Buchstaben O für Null, A bis N und P für 1 bis 15 geschrieben. Viele Maschinenbefehle hatten mnemonische Hex-Codes (A=Addieren, M=Multiplizieren, L=Laden, F=Festkomma usw.); Programme wurden ohne Befehlsnamen geschrieben.
  • Der Honeywell Datamatic D-1000 (1957) verwendete die Kleinbuchstaben b, c, d, e, f und g, während der Elbit 100 (1967) die Großbuchstaben B, C, D, E, F und G für die Werte 10 bis 15 verwendete.
  • Der Monrobot XI (1960) verwendete die Buchstaben S, T, U, V, W und X für die Werte 10 bis 15.
  • Der NEC-Parametron-Computer NEAC 1103 (1960) verwendete die Buchstaben D, G, H, J, K (und möglicherweise V) für die Werte 10-15.
  • Der Pacific Data Systems 1020 (1964) verwendete die Buchstaben L, C, A, S, M und D für die Werte 10 bis 15.
  • Neue numerische Symbole und Namen wurden 1968 von Boby Lapointe in der Bibi-Binär-Notation eingeführt. Diese Notation wurde jedoch nicht sehr populär.
Bruce Alan Martins Vorschlag für die hexadezimale Notation
  • Bruce Alan Martin vom Brookhaven National Laboratory hielt die Wahl von A-F für "lächerlich". In einem Brief an den Herausgeber der CACM von 1968 schlug er einen völlig neuen Satz von Symbolen auf der Grundlage der Bitpositionen vor, der sich jedoch nicht durchsetzen konnte.
  • R. O. Whitaker von Rowco Engineering Co. schlug 1972 eine dreieckige Schriftart vor, die "direktes binäres Lesen" ermöglicht, um "sowohl die Eingabe als auch die Ausgabe von Computern ohne Rücksicht auf Kodiermatrizen zu ermöglichen".
  • Einige Decoderchips für Siebensegmentanzeigen (z. B. 74LS47) zeigen unerwartete Ausgaben, weil die Logik nur für die korrekte Ausgabe von 0-9 ausgelegt ist.

Verbale und digitale Darstellungen

Da es keine traditionellen Ziffern gab, um die Mengen von zehn bis fünfzehn darzustellen, wurden die Buchstaben als Ersatz verwendet. In den meisten europäischen Sprachen gibt es für einige der Ziffern von elf bis fünfzehn keine nicht dezimalen Wörter. Manche Menschen lesen hexadezimale Zahlen Ziffer für Ziffer, wie eine Telefonnummer, oder verwenden das phonetische Alphabet der NATO, das Joint Army/Navy Phonetic Alphabet oder ein ähnliches Ad-hoc-System. Im Zuge der Übernahme des Hexadezimalsystems durch die Programmierer des IBM System/360 schlug Magnuson (1968) eine Aussprachehilfe vor, die den Buchstaben des Hexadezimalsystems kurze Namen gab - zum Beispiel wurde "A" als "ann", B als "bet", C als "chris" usw. ausgesprochen. Ein weiteres Benennungssystem wurde von Babb (2015) ausgearbeitet, das auf einem Scherz im Silicon Valley beruht. Ein weiteres Benennungssystem wurde von Rogers (2007) online veröffentlicht, das versucht, die verbale Darstellung in jedem Fall unterscheidbar zu machen, auch wenn die tatsächliche Zahl nicht die Ziffern A-F enthält. Beispiele sind in den unten stehenden Tabellen aufgeführt.

Andere haben vorgeschlagen, die verbalen Morsecode-Konventionen zu verwenden, um Vier-Bit-Hexadezimalziffern auszudrücken, wobei "dit" und "dah" für Null bzw. Eins stehen, so dass "0000" als "dit-dit-dit-dit" (....) ausgesprochen wird, dah-dit-dit-dah (-..-) die Ziffer mit dem Wert neun und "dah-dah-dah-dah" (----) die Hexadezimalziffer für die Dezimalzahl 15.

Hexadezimales Finger-Zählschema

Sowohl für das Binär- als auch für das Hexadezimalsystem wurden Systeme zum Zählen von Ziffern entwickelt. Arthur C. Clarke schlug vor, jeden Finger als Ein/Aus-Bit zu verwenden, so dass das Zählen von Null bis 102310 an zehn Fingern möglich ist. Ein anderes System zum Zählen bis FF16 (25510) ist rechts abgebildet.

Magnuson (1968)
Benennungsmethode
Nummer Aussprache
A ann
B bet
C chris
D Punkt
E ernest
F Frost
1A annteen
A0 annty
5B Fünfzig-Wette
A01C annty christeen
1AD0 annteen dotty
3A7D dreißig-ann siebzig-punkt
Rogers (2007)
Benennungsmethode
Nummer Aussprache
A zehn
B elf
C zwölf
D draze
E eptwin
F fim
10 tex
11 oneteek
1F fimteek
50 fiftek
C0 twelftek
100 hundrek
1000 thousek
3E thirtek-eptwin
E1 eptek-eins
C4A zwölf-hundrek-viertek-zehn
1743 ein-drei-drei-sieben-
-hundrek-viertek-drei

Vorzeichen

Im Hexadezimalsystem können negative Zahlen auf die gleiche Weise wie im Dezimalsystem ausgedrückt werden: -2A steht für -4210 und so weiter.

Das Hexadezimalsystem kann auch verwendet werden, um die genauen Bitmuster auszudrücken, die im Prozessor verwendet werden, so dass eine Folge von Hexadezimalziffern einen vorzeichenbehafteten oder sogar einen Gleitkommawert darstellen kann. So kann die negative Zahl -4210 in einem 32-Bit-CPU-Register (im Zweierkomplement) als FFFF FFD6, in einem 32-Bit-FPU-Register als C228 0000 oder in einem 64-Bit-FPU-Register als C045 0000 0000 0000 (im IEEE-Fließkomma-Standard) geschrieben werden.

Hexadezimale Exponentialschreibweise

Genauso wie Dezimalzahlen in Exponentialschreibweise dargestellt werden können, gilt dies auch für Hexadezimalzahlen. Konventionell steht der Buchstabe P (oder p, für "Potenz") für das Zweifache hoch zwei, während E (oder e) in der Dezimaldarstellung als Teil der E-Notation einen ähnlichen Zweck erfüllt. Die Zahl nach dem P ist dezimal und stellt den binären Exponenten dar. Erhöht man den Exponenten um 1, multipliziert man mit 2, nicht mit 16. 10.0p1 = 8.0p2 = 4.0p3 = 2.0p4 = 1.0p5. Normalerweise wird die Zahl so normiert, dass die führende Hexadezimalziffer 1 ist (es sei denn, der Wert ist genau 0).

Beispiel: 1.3DEp42 entspricht 1.3DE16 × 24210.

Die hexadezimale Exponentialschreibweise wird vom IEEE 754-2008-Standard für binäre Gleitkommazahlen gefordert. Diese Notation kann für Fließkomma-Literale in der C99-Edition der Programmiersprache C verwendet werden. Unter Verwendung der %a- oder %A-Konvertierungsspezifizierer kann diese Notation von Implementierungen der printf-Funktionsfamilie erzeugt werden, die der C99-Spezifikation und Einzelne Unix-Spezifikation (IEEE Std 1003.1) POSIX-Standard.

Konvertierung

Um Zahlen zwischen dem vor allem früher in der Informatik verbreiteten Oktalsystem und dem heute gebräuchlichen Hexadezimalsystem umzuwandeln, ist der Zwischenschritt über das Binärsystem zweckmäßig. Dies gelingt recht einfach, da sowohl die Basis 8, als auch die Basis 16 Zweierpotenzen sind.

  • Die Hexadezimalzahl wird nach obiger Tabelle in eine Folge von Binärziffern umgewandelt.
  • Die Vierergruppen werden in Dreiergruppen umgewandelt.
  • Anschließend wird die Binärfolge in eine Oktalfolge übersetzt.

Beispiel für 8D5316:

Genauso einfach erfolgt die Umwandlung von oktal nach hexadezimal, nur dass hier der Weg

gegangen wird.

Binäre Konvertierung

Die meisten Computer verarbeiten binäre Daten, aber für Menschen ist es schwierig, mit einer großen Anzahl von Ziffern selbst für eine relativ kleine Binärzahl zu arbeiten. Obwohl die meisten Menschen mit dem 10er-Basissystem vertraut sind, ist es viel einfacher, binäre Zahlen in hexadezimale umzuwandeln als in dezimale, da jede hexadezimale Ziffer einer ganzen Anzahl von Bits entspricht (410). In diesem Beispiel wird 11112 in die Basis 10 umgewandelt. Da jede Stelle in einer Binärzahl entweder eine 1 oder eine 0 enthalten kann, lässt sich ihr Wert leicht anhand ihrer Position von rechts bestimmen:

  • 00012 = 110
  • 00102 = 210
  • 01002 = 410
  • 10002 = 810

Daher:

11112 = 810 + 410 + 210 + 110
  = 1510

Mit etwas Übung ist die Umrechnung von 11112 nach F16 in einem Schritt einfach: siehe Tabelle in schriftlicher Darstellung. Der Vorteil der hexadezimalen gegenüber der dezimalen Darstellung wächst schnell mit der Größe der Zahl. Wenn die Zahl groß wird, ist die Umrechnung in Dezimalzahlen sehr mühsam. Bei der Umwandlung in Hexadezimal ist es jedoch trivial, die binäre Zeichenkette als 4-stellige Gruppen zu betrachten und jede davon in eine einzelne Hexadezimalziffer umzuwandeln.

Dieses Beispiel zeigt die Umwandlung einer Binärzahl in eine Dezimalzahl, die Zuordnung jeder Ziffer zum Dezimalwert und die Addition der Ergebnisse.

(01011110101101010010)2 = 26214410 + 6553610 + 3276810 + 1638410 + 819210 + 204810 + 51210 + 25610 + 6410 + 1610 + 210
  = 38792210

Vergleichen Sie dies mit der Umwandlung in Hexadezimalzahlen, bei der jede Gruppe von vier Ziffern unabhängig betrachtet und direkt umgewandelt werden kann:

(01011110101101010010)2 = 0101  1110  1011  0101  00102
  = 5 E B 5 216
  = 5EB5216

Die Umwandlung von Hexadezimal in Binär ist ebenso direkt.

Andere einfache Umrechnungen

Obwohl quaternäre Zahlen (Basis 4) wenig verwendet werden, lassen sie sich leicht in hexadezimale oder binäre Zahlen umwandeln und umgekehrt. Jede hexadezimale Ziffer entspricht einem Paar von quaternären Ziffern und jede quaternäre Ziffer entspricht einem Paar von binären Ziffern. Im obigen Beispiel 5 E B 5 216 = 11 32 23 11 024.

Auch das Oktalsystem (Basis 8) lässt sich relativ einfach umrechnen, wenn auch nicht ganz so trivial wie die Basen 2 und 4. Jede Oktalziffer entspricht drei binären Ziffern, nicht vier. Daher können wir zwischen Oktal und Hexadezimal über eine Zwischenkonvertierung in das Binärsystem konvertieren, gefolgt von einer Umgruppierung der binären Ziffern in Gruppen von drei oder vier.

Division - Rest in der Ausgangsbasis

Wie für alle Basen gibt es einen einfachen Algorithmus für die Konvertierung einer Zahl nach Hexadezimal durch ganzzahlige Division und Restoperationen in der Ausgangsbasis. Theoretisch ist dies von jeder Basis aus möglich, aber für die meisten Menschen ist nur das Dezimalsystem und für die meisten Computer nur das Binärsystem (das mit weitaus effizienteren Methoden umgewandelt werden kann) mit dieser Methode leicht zu handhaben.

d sei die Zahl, die hexadezimal dargestellt werden soll, und die Reihe hihi-1...h2h1 seien die hexadezimalen Ziffern, die die Zahl darstellen.

  1. i ← 1
  2. hi ← d mod 16
  3. d ← (d - hi) / 16
  4. Wenn d = 0 (Rückgabeserie hi), sonst i inkrementieren und zu Schritt 2 gehen

"16" kann durch jede beliebige andere Basis ersetzt werden.

Es folgt eine JavaScript-Implementierung des obigen Algorithmus zur Umwandlung einer beliebigen Zahl in eine Hexadezimalzahl in String-Darstellung. Sie dient der Veranschaulichung des obigen Algorithmus. Um ernsthaft mit Daten zu arbeiten, ist es jedoch viel ratsamer, mit bitweisen Operatoren zu arbeiten.

Funktion toHex(d) {
  var r = d % 16;
  wenn (d - r == 0) {
    return toChar(r);
  }
  return toHex((d - r) / 16) + toChar(r);
} <span title="Aus: Englische Wikipedia, Abschnitt &quot;Division-remainder in source base&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/Hexadecimal#Division-remainder_in_source_base <span style="color:#dddddd">ⓘ</span>]</span>

function toChar(n) {
  const alpha = "0123456789ABCDEF";
  return alpha.charAt(n);
}

Konvertierung durch Addition und Multiplikation

Eine hexadezimale Multiplikationstabelle

Es ist auch möglich, die Konvertierung durchzuführen, indem man jeder Stelle in der Ausgangsbasis die hexadezimale Darstellung ihres Stellenwerts zuweist - bevor man Multiplikation und Addition durchführt, um die endgültige Darstellung zu erhalten. Um zum Beispiel die Zahl B3AD in eine Dezimalzahl umzuwandeln, kann man die Hexadezimalzahl in ihre Ziffern zerlegen: B (1110), 3 (310), A (1010) und D (1310), und erhält dann das Endergebnis durch Multiplikation jeder Dezimalstelle mit 16p (p ist die entsprechende Hexadezimalstelle, von rechts nach links gezählt, beginnend mit 0). In diesem Fall ergibt sich Folgendes: B3AD = (11 × 163) + (3 × 162) + (10 × 161) + (13 × 160)

das ist 45997 zur Basis 10.

Werkzeuge für die Umrechnung

Viele Computersysteme verfügen über einen Taschenrechner, der in der Lage ist, Umrechnungen zwischen den verschiedenen Radizes, häufig auch hexadezimal, vorzunehmen.

Unter Microsoft Windows kann der Taschenrechner in den wissenschaftlichen Modus (in einigen Versionen auch Programmiermodus genannt) versetzt werden, der Umrechnungen zwischen den Radixen 16 (hexadezimal), 10 (dezimal), 8 (oktal) und 2 (binär), den von Programmierern am häufigsten verwendeten Basen, ermöglicht. Im wissenschaftlichen Modus enthält der numerische Tastenblock auf dem Bildschirm die hexadezimalen Ziffern A bis F, die aktiv sind, wenn "Hex" ausgewählt wird. Im Hex-Modus unterstützt der Windows-Rechner jedoch nur ganze Zahlen.

Elementare Arithmetik

Elementare Operationen wie Addition, Subtraktion, Multiplikation und Division können indirekt durch Umwandlung in ein anderes Zahlensystem durchgeführt werden, z. B. das allgemein verwendete Dezimalsystem oder das Binärsystem, bei dem jede Hex-Ziffer vier Binärziffern entspricht.

Alternativ können elementare Operationen auch direkt im Hexadezimalsystem selbst durchgeführt werden, indem man sich auf seine Additions-/Multiplikationstabellen und die entsprechenden Standardalgorithmen wie die lange Division und den traditionellen Subtraktionsalgorithmus stützt.

Reelle Zahlen

Rationale Zahlen

Wie andere Zahlensysteme kann auch das Hexadezimalsystem zur Darstellung rationaler Zahlen verwendet werden, wobei wiederholte Expansionen üblich sind, da 16 (1016) nur einen einzigen Primfaktor hat, nämlich zwei.

Für jede Basis ist 0,1 (oder "1/10") immer gleichbedeutend mit eins geteilt durch die Darstellung dieses Basiswerts in seinem eigenen Zahlensystem. Ob man also im Binärsystem eins durch zwei teilt oder im Hexadezimalsystem eins durch sechzehn, beide Brüche werden als 0,1 geschrieben. Da die Radix 16 ein perfektes Quadrat (42) ist, haben Brüche im Hexadezimalsystem viel häufiger eine ungerade Periode als Dezimalbrüche, und es gibt keine zyklischen Zahlen (außer trivialen einzelnen Ziffern). Wiederkehrende Ziffern treten auf, wenn der kleinste Nenner einen Primfaktor hat, der nicht in der Radix vorkommt. Bei der hexadezimalen Schreibweise ergeben also alle Brüche mit Nennern, die keine Zweierpotenz sind, eine unendliche Folge von wiederkehrenden Ziffern (wie Terzen und Quinten). Dies macht die hexadezimale (und binäre) Schreibweise für die Darstellung rationaler Zahlen weniger geeignet als die dezimale, da ein größerer Anteil außerhalb des Bereichs der endlichen Darstellung liegt.

Alle rationalen Zahlen, die im Hexadezimalsystem endlich darstellbar sind, sind auch im Dezimalsystem, Duodezimalsystem und Sexagesimalsystem endlich darstellbar, d. h. jede hexadezimale Zahl mit einer endlichen Anzahl von Ziffern hat auch eine endliche Anzahl von Ziffern, wenn sie in diesen anderen Basen ausgedrückt wird. Umgekehrt ist nur ein Teil der in den letztgenannten Basen endlich darstellbaren Zahlen auch endlich in Hexadezimal darstellbar. So entspricht z. B. die Dezimalzahl 0,1 der unendlich wiederkehrenden Darstellung 0,19 in Hexadezimal. Für die Darstellung von Brüchen mit Zweierpotenzen im Nenner ist Hexadezimal jedoch effizienter als Duodezimal und Sexagesimal. Zum Beispiel entspricht 0,062510 (ein Sechzehntel) 0,116, 0,0912 und 0;3,4560.

n Dezimal
Primfaktoren von: Basis, b = 10: 2, 5;
b - 1 = 9: 3
Hexadezimal
Primfaktoren zur Basis, b = 1610 = 10: 2; b - 1 = 1510 = F: 3, 5
Reziprokwert Primfaktoren Positionale Darstellung
(hexadezimal)
Positionale Darstellung
(dezimal zum Vergleich)
Primfaktoren Reziprokwert
2 1/2 2 0.8 0.5 2 1/2
3 1/3 3 0.5555... = 0.5 0.3333... = 0.3 3 1/3
4 1/4 2 0.4 0.25 2 1/4
5 1/5 5 0.3 0.2 5 1/5
6 1/6 2, 3 0.2A 0.16 2, 3 1/6
7 1/7 7 0.249 0.142857 7 1/7
8 1/8 2 0.2 0.125 2 1/8
9 1/9 3 0.1C7 0.1 3 1/9
10 1/10 2, 5 0.19 0.1 2, 5 1/A
11 1/11 11 0.1745D 0.09 B 1/B
12 1/12 2, 3 0.15 0.083 2, 3 1/C
13 1/13 13 0.13B 0.076923 D 1/D
14 1/14 2, 7 0.1249 0.0714285 2, 7 1/E
15 1/15 3, 5 0.1 0.06 3, 5 1/F
16 1/16 2 0.1 0.0625 2 1/10
17 1/17 17 0.0F 0.0588235294117647 11 1/11
18 1/18 2, 3 0.0E38 0.05 2, 3 1/12
19 1/19 19 0.0D79435E5 0.052631578947368421 13 1/13
20 1/20 2, 5 0.0C 0.05 2, 5 1/14
21 1/21 3, 7 0.0C3 0.047619 3, 7 1/15
22 1/22 2, 11 0.0BA2E8 0.045 2, B 1/16
23 1/23 23 0.0B21642C859 0.0434782608695652173913 17 1/17
24 1/24 2, 3 0.0A 0.0416 2, 3 1/18
25 1/25 5 0.0A3D7 0.04 5 1/19
26 1/26 2, 13 0.09D8 0.0384615 2, D 1/1A
27 1/27 3 0.097B425ED 0.037 3 1/1B
28 1/28 2, 7 0.0924 0.03571428 2, 7 1/1C
29 1/29 29 0,08D3DCB 0.0344827586206896551724137931 1D 1/1D
30 1/30 2, 3, 5 0.08 0.03 2, 3, 5 1/1E
31 1/31 31 0.08421 0.032258064516129 1F 1/1F
32 1/32 2 0.08 0.03125 2 1/20
33 1/33 3, 11 0,07C1F 0.03 3, B 1/21
34 1/34 2, 17 0.078 0.02941176470588235 2, 11 1/22
35 1/35 5, 7 0.075 0.0285714 5, 7 1/23
36 1/36 2, 3 0.071C 0.027 2, 3 1/24

Irrationale Zahlen

Die folgende Tabelle enthält die Expansionen einiger gebräuchlicher irrationaler Zahlen in Dezimal- und Hexadezimalzahlen.

Nummer Positionale Darstellung
Dezimal Hexadezimal
2 (die Länge der Diagonale eines Einheitsquadrats) 1.414213562373095048... 1.6A09E667F3BCD...
3 (die Länge der Diagonale eines Einheitsquaders) 1.732050807568877293... 1.BB67AE8584CAA...
5 (die Länge der Diagonale eines 1×2-Rechtecks) 2.236067977499789696... 2.3C6EF372FE95...
φ (phi, der goldene Schnitt = (1+5)/2) 1.618033988749894848... 1.9E3779B97F4A...
π (pi, das Verhältnis des Umfangs zum Durchmesser eines Kreises) 3.141592653589793238462643
383279502884197169399375105...
3.243F6A8885A308D313198A2E0
3707344A4093822299F31D008...
e (die Basis des natürlichen Logarithmus) 2.718281828459045235... 2.B7E151628AED2A6B...
τ (die Thue-Morse-Konstante) 0.412454033640107597... 0.6996 9669 9669 6996...
γ (die begrenzende Differenz zwischen der harmonischen Reihe und dem natürlichen Logarithmus) 0.577215664901532860... 0.93C467E37DB0C7A4D1B...

Potenzen

Zweierpotenzen haben sehr einfache Erweiterungen in Hexadezimal. Die ersten sechzehn Zweierpotenzen sind unten dargestellt.

2x Wert Wert (dezimal)
20 1 1
21 2 2
22 4 4
23 8 8
24 10hex 16dez
25 20hex 32dez
26 40hex 64dez
27 80hex 128dez
28 100hex 256dez
29 200hex 512dez
2A (210dez) 400hex 1024dez
2B (211dez) 800hex 2048dez
2C (212dez) 1000hex 4096dec
2D (213dec) 2000hex 8192dez
2E (214dez) 4000hex 16,384dec
2F (215dez) 8000hex 32,768dec
210 (216dez) 10000hex 65,536dec

Kulturgeschichte

Die traditionellen chinesischen Maßeinheiten waren Basis-16. Zum Beispiel entspricht ein jīn (斤) im alten System sechzehn Tael. Mit dem suanpan (chinesischer Abakus) lassen sich hexadezimale Berechnungen wie Additionen und Subtraktionen durchführen.

Wie beim Duodezimalsystem hat es gelegentlich Versuche gegeben, das Hexadezimalsystem als bevorzugtes Zahlensystem durchzusetzen. Bei diesen Versuchen werden oft eine spezielle Aussprache und Symbole für die einzelnen Ziffern vorgeschlagen. In einigen Vorschlägen werden Standardmaße so vereinheitlicht, dass sie ein Vielfaches von 16 sind. Ein früher solcher Vorschlag wurde von John W. Nystrom in Project of a New System of Arithmetic, Weight, Measure and Coins unterbreitet: Proposed to be called the Tonal System, with Sixteen to the Base, veröffentlicht im Jahr 1862. Nystrom schlug unter anderem die hexadezimale Zeit vor, bei der ein Tag durch 16 unterteilt wird, so dass ein Tag 16 "Stunden" (oder "10 tims", sprich: tontim) hat.

Das Wort Hexadezimal wird erstmals 1952 erwähnt. Es ist makaronisch in dem Sinne, dass es das griechische ἕξ (hex) "sechs" mit dem lateinischen -dezimal kombiniert. Die rein lateinische Alternative sexadecimal (vergleiche das Wort sexagesimal für die Basis 60) ist älter und wird seit dem späten 19. Jahrhundert zumindest gelegentlich verwendet. Sie wird noch in den 1950er Jahren in der Bendix-Dokumentation verwendet. Schwartzman (1994) argumentiert, dass die Verwendung von sexadecimal möglicherweise wegen seiner suggestiven Abkürzung für das Geschlecht vermieden wurde. Viele westliche Sprachen haben seit den 1960er Jahren Begriffe übernommen, die in ihrer Bildung dem Hexadezimalsystem entsprechen (z. B. Französisch hexadécimal, Italienisch esadecimale, Rumänisch hexazecimal, Serbisch хексадецимални usw.) aber andere haben Begriffe eingeführt, die einheimische Wörter für "sechzehn" ersetzen (z. B. griechisch δεκαεξαδικός, isländisch sextándakerfi, russisch шестнадцатеричной usw.)

Die Terminologie und Notation wurde erst Ende der 1960er Jahre festgelegt. Donald Knuth vertrat 1969 die Auffassung, dass der etymologisch korrekte Begriff senidenär oder möglicherweise sedenär sei, ein lateinischer Begriff, der "gruppiert nach 16" in Anlehnung an binär, ternär und quaternär usw. bedeuten sollte. Nach Knuths Argumentation wären die korrekten Bezeichnungen für Dezimal- und Oktalarithmetik denary bzw. octonary. Alfred B. Taylor verwendete in seiner Arbeit über alternative Zahlenbasen Mitte des 18. Jahrhunderts den Begriff senidenary, obwohl er die Basis 16 wegen ihrer "unbequemen Anzahl von Ziffern" verwarf.

Die heute gebräuchliche Notation mit den Buchstaben A bis F hat sich ab 1966 als De-facto-Standard etabliert, als Folge der Veröffentlichung des Fortran IV-Handbuchs für IBM System/360, das (im Gegensatz zu früheren Fortran-Varianten) einen Standard für die Eingabe hexadezimaler Konstanten kennt. Wie bereits erwähnt, wurden alternative Notationen von NEC (1960) und The Pacific Data Systems 1020 (1964) verwendet. Der von IBM angenommene Standard scheint sich bis 1968 durchgesetzt zu haben, als Bruce Alan Martin in seinem Brief an den Herausgeber des CACM beklagt, dass

"Da die lächerliche Wahl der Buchstaben A, B, C, D, E, F als hexadezimale Zahlensymbole zu den ohnehin schon lästigen Problemen bei der Unterscheidung von Oktal- (oder Hex-) Zahlen und Dezimalzahlen (oder Variablennamen) noch hinzukommt, ist die Zeit für ein Überdenken unserer Zahlensymbole überreif. Das hätte man tun sollen, bevor sich schlechte Entscheidungen zu einem De-facto-Standard entwickelt haben!"

Martins Argument war, dass die Verwendung der Ziffern 0 bis 9 in nicht dezimalen Zahlen "für uns ein Basis-Zehn-Stellenwertschema impliziert": "Warum nicht völlig neue Symbole (und Namen) für die sieben oder fünfzehn Nicht-Null-Ziffern verwenden, die in Oktal oder Hex benötigt werden? Selbst die Verwendung der Buchstaben A bis P wäre eine Verbesserung, aber völlig neue Symbole könnten die binäre Natur des Systems widerspiegeln". Er argumentierte auch, dass "die Wiederverwendung von Buchstaben des Alphabets für numerische Ziffern einen gigantischen Rückschritt gegenüber der Erfindung eindeutiger, nicht-alphabetischer Glyphen für Ziffern vor sechzehn Jahrhunderten darstellt" (als Brahmi-Ziffern und später in einem hindu-arabischen Zahlensystem), und dass die jüngsten ASCII-Standards (ASA X3.4-1963 und USAS X3.4-1968) "sechs Positionen in der Codetabelle nach den zehn Dezimalziffern hätten beibehalten werden sollen -- anstatt diese unnötigerweise mit Satzzeichen zu füllen" (":;<=>?"), die an anderer Stelle der 128 verfügbaren Positionen hätten untergebracht werden können.

Base16 (Übertragungskodierung)

Base16 (als Eigenname ohne Leerzeichen) kann sich auch auf eine Binär-zu-Text-Kodierung beziehen, die zur gleichen Familie gehört wie Base32, Base58 und Base64.

In diesem Fall werden die Daten in 4-Bit-Sequenzen unterteilt, und jeder Wert (zwischen 0 und 15 einschließlich) wird mit 16 Zeichen aus dem ASCII-Zeichensatz kodiert. Obwohl alle 16 Symbole des ASCII-Zeichensatzes verwendet werden können, werden in der Praxis immer die ASCII-Ziffern '0'-'9' und die Buchstaben 'A'-'F' (oder die Kleinbuchstaben 'a'-'f') gewählt, um sich an die Standardnotation für Hexadezimalzahlen anzupassen.

Die Base16-Kodierung hat mehrere Vorteile:

  • Die meisten Programmiersprachen verfügen bereits über Möglichkeiten, ASCII-kodierte Hexadezimalzahlen zu parsen.
  • Da es sich um genau ein halbes Byte handelt, sind 4 Bits einfacher zu verarbeiten als die 5 oder 6 Bits von Base32 bzw. Base64
  • Die Symbole 0-9 und A-F sind in der hexadezimalen Notation universell, so dass sie auf einen Blick leicht zu verstehen sind, ohne dass man auf eine Symboltabelle zurückgreifen muss.
  • Viele CPU-Architekturen verfügen über spezielle Befehle, die den Zugriff auf ein Halbbyte (auch bekannt als "Nibble") ermöglichen, wodurch die Kodierung in der Hardware effizienter ist als Base32 und Base64.

Die Hauptnachteile der Base16-Kodierung sind:

  • Die Speichereffizienz beträgt nur 50 %, da jeder 4-Bit-Wert der Originaldaten als 8-Bit-Byte kodiert wird. Im Gegensatz dazu haben Base32- und Base64-Kodierungen eine Raumeffizienz von 63 % bzw. 75 %.
  • Mögliche zusätzliche Komplexität, da sowohl Groß- als auch Kleinbuchstaben akzeptiert werden müssen

Die Unterstützung der Base16-Kodierung ist in der modernen Datenverarbeitung allgegenwärtig. Sie ist die Grundlage für den W3C-Standard für die URL-Prozentkodierung, bei der ein Zeichen durch ein Prozentzeichen "%" und seine Base16-kodierte Form ersetzt wird. Die meisten modernen Programmiersprachen bieten direkte Unterstützung für die Formatierung und Analyse von Base16-kodierten Zahlen.

Zählen im Hexadezimalsystem

Gezählt wird wie folgt:

0 1 2 3 4 5 6 7 8 9 A B C D E F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
... ... ... ... ... ... ... ... ... ... ... ... ... ...
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
100 101 102 103 104 105 106 107 108 109 10A 10B 10C 10D 10E 10F
... ... ... ... ... ... ... ... ... ... ... ... ... ...
FF0 FF1 FF2 FF3 FF4 FF5 FF6 FF7 FF8 FF9 FFA FFB FFC FFD FFE FFF
1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 100A 100B 100C 100D 100E 100F
... ... ... ... ... ... ... ... ... ... ... ... ... ...
FFF0 FFF1 FFF2 FFF3 FFF4 FFF5 FFF6 FFF7 FFF8 FFF9 FFFA FFFB FFFC FFFD FFFE FFFF
10000 10001 10002 10003 10004 10005 10006 10007 10008 10009 1000A 1000B 1000C 1000D 1000E 1000F
... ... ... ... ... ... ... ... ... ... ... ... ... ...

Aussprache der Hexadezimalzahlen

Für die hexadezimalen Ziffern und Zahlen sind keine eigenständigen Namen gebräuchlich. Hexadezimalzahlen werden daher meist Ziffer für Ziffer gelesen.

Beispiele:

  • 10 sprich: „eins-null“ (nicht: „zehn“),
  • 1E sprich: „eins-E“,
  • F112 sprich: „F-eins-eins-zwei“.

Analog lässt sich jedoch auch die Zählweise des Dezimalsystems verwenden, ohne dass der Einsatz des Hexadezimalsystems bei jeder Zahl gehört werden kann und sich dann zum Beispiel aus dem Kontext ergeben muss. Da es allerdings zu Verwechslungen mit Dezimalzahlen kommen kann, wird dies seltener angewendet.

Beispiele:

  • 10 sprich: „zehn“,
  • 1E sprich: „E-zehn“,
  • BD sprich: „D-und-B-zig“,
  • F2A sprich: „F-hundert-A-undzwanzig“,
  • F112 sprich: „F-tausendeinhundertzwölf“.

Hexadezimale Multiplikationstafel (kleines Einmaleins)

Beispiel: 2 · 5 = A

Von der Spalte mit dem Wert 2 vertikal hinunter gehen bis Schnittpunkt der Zeile mit Wert 5 → Ergebnis: A

* 1 2 3 4 5 6 7 8 9 A B C D E F 10
1 1 2 3 4 5 6 7 8 9 A B C D E F 10
2 2 4 6 8 A C E 10 12 14 16 18 1A 1C 1E 20
3 3 6 9 C F 12 15 18 1B 1E 21 24 27 2A 2D 30
4 4 8 C 10 14 18 1C 20 24 28 2C 30 34 38 3C 40
5 5 A F 14 19 1E 23 28 2D 32 37 3C 41 46 4B 50
6 6 C 12 18 1E 24 2A 30 36 3C 42 48 4E 54 5A 60
7 7 E 15 1C 23 2A 31 38 3F 46 4D 54 5B 62 69 70
8 8 10 18 20 28 30 38 40 48 50 58 60 68 70 78 80
9 9 12 1B 24 2D 36 3F 48 51 5A 63 6C 75 7E 87 90
A A 14 1E 28 32 3C 46 50 5A 64 6E 78 82 8C 96 A0
B B 16 21 2C 37 42 4D 58 63 6E 79 84 8F 9A A5 B0
C C 18 24 30 3C 48 54 60 6C 78 84 90 9C A8 B4 C0
D D 1A 27 34 41 4E 5B 68 75 82 8F 9C A9 B6 C3 D0
E E 1C 2A 38 46 54 62 70 7E 8C 9A A8 B6 C4 D2 E0
F F 1E 2D 3C 4B 5A 69 78 87 96 A5 B4 C3 D2 E1 F0
10 10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0 100

Hexadezimalbrüche

Da das Hexadezimalsystem ein Stellenwertsystem ist, haben die Stellen nach dem Komma (das auch hier manchmal als Punkt geschrieben wird) den Stellenwert , wobei die dezimale Basis 16 und die Position der jeweiligen Nachkommastelle ist. Die erste Nachkommastelle () hat damit den Stellenwert , die zweite Nachkommastelle () hat den Stellenwert , die dritte Nachkommastelle () hat den Wert und so weiter.

Da die Zahl 16 nur über den einzigen Primfaktor 2 verfügt, ergibt sich bei allen gekürzten Brüchen, deren Nenner keine Zweierpotenz ist, eine periodische Kommadarstellung im Hexadezimalsystem:

= 1 = 0,316 = 0,1C716 = 0,13B16
= 0,816 = 0,2A16 = 0,1916 = 0,124916
= 0,516 = 0,24916 = 0,1745D16 = 0,116
= 0,416 = 0,216 = 0,1516 = 0,116

Negative Zahlen

Negative Zahlen lassen sich ebenfalls darstellen. Dazu wird in den meisten Fällen die Zweierkomplement-Darstellung verwendet. Durch ihre Auslegung braucht an den Mechanismen für Rechnungen in den Grundrechenarten keine Änderung vorgenommen zu werden.

Anwendung

Informatik

Das Hexadezimalsystem eignet sich sehr gut, um Folgen von Bits (verwendet in der Digitaltechnik) darzustellen. Vier Stellen einer Bitfolge (ein Nibble) werden wie eine Dualzahl interpretiert und entsprechen so einer Ziffer des Hexadezimalsystems, da 16 die vierte Potenz von 2 ist. Die Hexadezimaldarstellung der Bitfolgen ist leichter zu lesen und schneller zu schreiben:

binär hexadezimal dezimal
1111 F 15
1.1111 1F 31
11.0111.1100.0101 37C5 14.277
1010.1100.1101.1100 ACDC 44.252
1.0000.0000.0000.0000 1.0000 65.536
1010.1111.1111.1110.0000.1000.0001.0101 AFFE.0815 2.952.661.013

Der Punkt dient bei dieser Darstellung lediglich der Zifferngruppierung.

Software stellt daher Maschinensprache oft auf diese Weise dar.

Mathematik

Seitdem die Bailey-Borwein-Plouffe-Formel zur Berechnung von π im Jahr 1995 entwickelt wurde, ist das Hexadezimalsystem auch jenseits der Informatik von Bedeutung. Diese Summenformel kann jede beliebige Hexadezimalstelle von π berechnen, ohne die vorhergehenden Stellen dafür zu benötigen.

Konvertierung in andere Zahlensysteme

Viele Taschenrechner, aber auch die genauso genannten Hilfsprogramme auf Personal Computern, bieten Umrechnungen zum Zahlbasiswechsel an. Insbesondere rechnen die Windows- und macOS-Programme „Rechner“ Binär-, Hexadezimal- und Oktalzahlen in Dezimale und zurück, wenn man unter „Ansicht“ (Windows) bzw. „Darstellung“ (macOS) den Menüpunkt „Programmierer“ auswählt. In vielen Linux-Distributionen ist ein Taschenrechner-Hilfsprogramm vorinstalliert, das eine solche „Programmierer-Option“ beinhaltet, oder man kann in der Kommandozeile die Anweisung printf (als eingebauten bash-Befehl oder gesondertes Hilfsprogramm) dafür benutzen.

Umwandlung von Dezimalzahlen in Hexadezimalzahlen

Eine Möglichkeit, eine Zahl des Dezimalsystems in eine Zahl des Hexadezimalsystems umzurechnen, ist die Betrachtung der Divisionsreste, die entstehen, wenn die Zahl durch die Basis 16 geteilt wird, die Methode wird daher auch Divisionsverfahren oder Restwertverfahren genannt.

Im Beispiel der 127810 sähe das so aus:

1278 : 16 = 79 Rest: 14 (= E) (Nr:1278-(79*16)=14)
  79 : 16 =  4 Rest: 15 (= F) (Nr:79-(4*16)=15)
   4 : 16 =  0 Rest:  4       (Nr:4-(0*16)=4) 

Die Hexadezimalzahl wird von unten nach oben gelesen und ergibt somit 4FE.

Mathematische Darstellung des Hexadezimalsystems

Formuliert im Dezimalsystem:

Formuliert im Hexadezimalsystem:

Ein- und zweihändiges Zählen mit den Fingerspitzen und Gelenken

Wie auch das altbabylonische Sexagesimalsystem lässt sich auch das Hexadezimalsystem mit den Fingern abzählen. Mithilfe der folgenden Technik wird mit beiden Händen zusammen ein Byte dargestellt. Jede Hand repräsentiert dabei ein Nibble. Dessen oberes Crumb (Hälfte des Nibbles) zeigt sich am benutzten Finger, sein unteres Crumb dagegen am bezeigten Gelenk bzw. der Fingerspitze. Ein Bitflip ist durch Punktspiegelung der Daumenposition am Mittelpunkt der Fingerfläche herbeiführbar.

Einhändiges Zählen von Null bis F16

OK-Zeichen

Benutzt man, wie schon die alten Babylonier, den Daumen als Zeiger, legt ihn an die Spitze des Zeigefingers wie beim OK-Zeichen der Taucher und definiert dieses Zeichen als die Null, lässt sich am oberen Gelenk des Zeigefingers die Eins festlegen, gefolgt von der Zwei am mittleren und schließlich der Drei am unteren Gelenk. Genauso fortgesetzt über die Vier an der Spitze des Mittelfingers, der Acht an der Spitze des Ringfingers und der Zwölf an der des kleinen. Damit lässt sich dann bis 15 = F16 zählen, wenn der Daumen das untere Gelenk des kleinen Fingers erreicht hat, da wo er angewachsen ist.

Die beiden Crumbs des Nibbles werden dabei orthogonal auf der Hand abgebildet, sodass die unteren beiden Bits an der Höhe des Daumens am jeweiligen Finger und die beiden oberen am benutzen Finger abgelesen werden können. Das heißt, sowohl ein Daumen an der Fingerspitze, als auch am Zeigefinger steht für 002 im jeweiligen Crumb. Das obere Gelenk sowie der Mittelfinger stehen für 012, das mittlere Gelenk und der Ringfinger für 102 und das untere Gelenk und der kleine Finger bedeuten 112. Somit müssen sich nur noch vier Kombinationen gemerkt werden, um mit der Hand zwischen Hexadezimal- und Binärsystem zu konvertieren, anstelle von 16.

Ein Bitflip ist durch Punktspiegelung der Position des Daumens am Schnittpunkt der gedachten Achsen zwischen Ring- und Mittelfinger sowie der oberen und mittleren Gelenkreihe einfach zu erzielen. Ein Beispiel ist am Ende der folgenden Tabelle gegeben.

Beispiel zur Umwandlung zwischen Hex und Binär sowie von Bitflips mithilfe der Hand
Ganzes Nibble Oberes Crumb Finger Unteres Crumb Position des Daumens am Finger
016 = (00 00)2 002 Zeigefinger 002 Spitze, OK-Zeichen
116 = (00 01)2 002 Zeigefinger 012 Oberes Gelenk
216 = (00 10)2 002 Zeigefinger 102 Mittleres Gelenk
316 = (00 11)2 002 Zeigefinger 112 Unteres Gelenk
416 = (01 00)2 012 Mittelfinger 002 Spitze
816 = (10 00)2 102 Ringfinger 002 Spitze
C16 = (11 00)2 112 kleiner Finger 002 Spitze
Bitflip von 216 durch Punktspiegelung am Schnittpunkt der o. g. gedachten Achsen
D16 = (11 01)2 112 kleiner Finger 012 Oberes Gelenk

Zweihändiges Zählen von Null bis FF16

Zählt man nun auf der linken Hand mit dem oben beschriebenen Verfahren, wie oft man auf der rechten Hand bis F16 gezählt hat, so lässt sich mit zwei Händen ein Byte darstellen. Da an jedem Finger vier Elemente gezählt werden, ergibt sich, dass an den Fingerspitzen Vielfache von Vier auftreten. Dies bedeutet, dass, wenn die Daumen der jeweiligen Hände an der jeweiligen Zeigefingerspitze bei Null zu zählen beginnen, der Wert sich an den Fingerspitzen der rechten Hand um vier, wohingegen bei der linken um jeweils 4016 bzw. 64, erhöht. Rückt man an der linken Hand nur um ein Fingerglied vor oder zurück, so ändert sich der dargestellte Wert um 1016 bzw. 16.