10 Juli 2023

Wie liest man eigentlich hexadezimale und binäre Zahlen?

Wer Sonderzeichen eingeben will, kann dies entweder über den hexadezimalen oder den dezimalen Unicode tun, letztere im �-Format oft auch als HTML-Entitäten bezeichnet. Computer rechnen dagegen im Dual- oder Binärsystem, das heißt, nur mit Nullen und Einsen. Da muss man erstmal durchblicken. … bringt Licht ins Dunkle.  

Wer beruflich viel mit Farben zu tun hat, kann ein Lied davon singen, wie schwer es oft ist, die vielfach hexadezimal notierten RGB-Farbwerte in dezimale Zahlen, also von Basis 16 zu Basis 10, umzuwandeln. Reines Schwarz oder Weiß sind bei der HTML-Kodierung mit #00 00 00 (0 0 0 für Rot, Grün, Blau) und #FFFFFF (255 255 255) noch einfach. Aber bei Silber mit dem Hex-Code #C0C0C0 (192 192 192) wird es schon schwieriger, zumal alle drei RGB-Farben jeweils mit einer Sättigung von 79,29 % daherkommen. Komische Zahl.   

Computer rechnen mit Vorzeichen + und –

Die hexadezimalen Buchstaben stehen dabei für die dezimalen Zahlenwerte 10 bis 15. Und dann muss man bei C0 nur noch die Stellenwerte berücksichtigen, um auf die dezimale 192 zu kommen. Im Dezimalsystem beginnen die Stellenwerte mit den Einerstellen oder  des jeweiligen Zahlenwertes links vom Komma und mit der Zehntelstelle oder  rechts vom Komma. Die Zahl 75,5 könnte man also auch als  schreiben. Diese Methode lässt sich auch auf andere Stellenwertsysteme übertragen. Die Binärzahl  kann folglich mit  oder  übersetzt werden.   

Binär -oder im Dualsystem- ausgedrückt, bräuchte man für FFFFFF oder C0C0C0 jeweils 24 binäre Ziffern (binary digits oder Bits). Besser wäre sogar, mindestens eine 0 voranzustellen, denn Computer rechnen in der Regel vorzeichenbehaftet (signed) und nicht vorzeichenlos (unsigned). Das erste Bit in einem String zeigt dabei als Most Significant Bit (MSB) an, ob es sich um einen Pluswert (0) oder einen Minuswert (1) des jeweiligen Stellenwertes handelt.

Gibt man zum Beispiel im Windows-Rechner für Programmierer FFFFFF ein, erscheint der vorzeichenlose Binärwert  und der entsprechende Dezimalwert 16.777.215 (2²³+2²²…2⁰). Vorzeichenbehaftet müsste man davon aber die vorderste 1 als 2²³ oder 8.388.608 abziehen, um auf einen ganz anderen Wert zu kommen, wie Computer den String lesen.  

Unicode hat alle Sprachen zusammen gebracht

Hexadezimal in binär umzuwandeln und umgekehrt ist relativ einfach, weil vier Bits zusammen jeweils einen Hex-Wert repräsentieren. Nur die Stellenwerte in einem jeweiligen 4er-Block müssen bekannt sein, wobei F beziehungsweise die binäre Zahl  für  also für 15 steht. Die Umwandlung von hexadezimal in dezimal und umgekehrt ist komplizierter, aber auch kein Hexenwerk, wie später zu sehen ist.

Hier zunächst ein anderes Thema, bei dem man gelegentlich zwischen hexadezimal und dezimal umrechnen muss: Die Eingabe von Sonderzeichen und anderen Zeichen. Je nach Umgebung und Eingabemethode muss man dafür mal den Hex-Code, mal den Dezimal-Code kennen.

Der Unicode-Standard hat Vieles vereinfacht und mehr oder weniger Schluss gemacht mit dem Kuddelmuddel, dass zum Beispiel chinesische Texte -je nach Kodierung- entweder als Buchstaben- oder Zahlensalat erscheinen. Der aktuelle Unicode-Standard 15.0 von September 2022 bringt praktisch alle lebendigen und toten Sprachen der Welt zusammen und umfasst beinahe 150,000 verschiedene Zeichen. Theoretisch könnten es auf 17 Ebenen mit jeweils 2¹⁶ oder 65.536 Codepoints sogar mehr als 1,1 Millionen Buchstaben, Zahlen, Befehle und Zeichen über Zeichen sein. Computer kennen zwar nur binäre Zustände (an oder aus, 1 oder 0). Und ASCII-Zeichen, wie sie heute bis Code-Punkt 255 noch verwendet werden, sind aber auch noch binär kodiert.

ASCII ist nicht gleich ASCII

Um aber allein das Ausrufezeichen, das erste druckbare ASCII-Zeichen, darzustellen, müsste man  statt hexadezimal 21 oder dezimal 33 schreiben. Daher sind Unicode-Nummern wie vom Unicode Consortium nach dem Schema U+0000 in der Regel in Hexadezimal-Form angegeben.   

Darunter oder daneben findet sich im Format � auch oft die meist dezimal bezeichnete HTML-Entität. Weiß man diese dezimale Ziffernfolge, ist es in Microsoft Word ein Leichtes, weniger geläufige Zeichen über die ALT-Taste und den Ziffernblock einzugeben. Manchmal muss man vor die Ziffernfolge gemäß dem englischen Tastaturlayout aber auch eine 0 setzen, denn ALT+190 spuckt bei Word für Windows zum Beispiel das japanische Währungssymbol ¥ aus, ALT+0190 dagegen das Dreiviertel-Zeichen ¾.

Das liegt daran, dass der von 128 auf 256 erweiterte ACSII-Code nicht einheitlich ist, sondern von der Codepage beziehungsweise der Zeichentabelle abhängt. In der von IBM 1981 auf den Weg gebrachten Codepage 437 zum Beispiel ist 190 das Rahmenelement ╛, das im Unicode-Zeichensatz erst Platz U+255B und laut HTML-Entität Platz 9563 einnimmt. Daher kann es sein, dass man bei manchen fremdländischen Texten immer noch die Kodierung ändern muss, obwohl sich Unicode und UTF-8 mittlerweile weltweit durchgesetzt haben.

TIPP: Hat man im Internet ein Zeichen gesehen und will die Unicode-Nummer finden und umgekehrt, muss man es nur nach Microsoft Word kopieren, um direkt dahinter die Umschalter-Tastenkombination ALT+c  zu verwenden. U+FDFD zum Beispiel mit oder ohne vorangestelltem U+ ist die Unicode-Nummer für die arabische Ligatur ﷽, ausgeschrieben („Bismillah arahman arahim“, auf Deutsch „Im Namen Gottes, des Allbarmherzigen), eines der komplexesten Unicode-Zeichen überhaupt. Ob und wie es am Bildschirm erscheint, hängt von dem dahinter liegenden Zeichensatz ab. Nicht darstellbare Zeichen erscheinen so mit einem Platzhalter wie einem durchkreuzten Rechteck.  

Wie von einem zum anderen Stellenwertsystem umwandeln

Nun zu der Frage, wie man hexadezimal in dezimal und umgekehrt umrechnet. Im Hexadezimal- oder 16er-System reichen die Ziffern nicht nur von 0 bis 9, sondern von 0 bis 9 und von A bis F, wobei die Buchstaben die Dezimalzahlen 10 bis 15 repräsentieren. Wie bei jedem Stellenwertsystem stehen die hexadezimalen Ziffern links vom Komma jeweils für das X-fache des jeweiligen Stellenwerts.

ABCDEF16 liest sich also wie .

So muss man die einzelnen Multiplikationsergebnisse nur noch addieren, um auf die Dezimalzahl 11.259.375 zu kommen. Umgekehrt kann man das genauso machen, wenn man die 16er-Potenzen kennt:

Letztere Zahl ist 256 × 256 × 256  und erinnert nicht nur zufällig an die heute noch viel verbreitete 24-Bit-Farbtiefe mit 3-mal 8 Bit oder 2²⁴ beziehungsweise rund 16,78 Millionen darstellbare Farben, auch True Color genannt. Will man von anderen Stellenwertsystemen in das Dezimalsystem umrechnen, kann man die Zahl also in das Vielfache der jeweiligen Stellenwerte zerlegen. Die binäre  liest sich dann als 2⁴ + 2³ + 2⁰ oder 16 + 8 + 1, was 25 ergibt.  

Eine Tabelle kann helfen

Eine andere Möglichkeit, von einem anderen Stellenwertsystem ins Dezimalsystem umzurechnen, ist die Verwendung des sogenannten Horner-Schemas. Dabei fängt man damit an, die Ziffer ganz links (ohne vorangestellte Nullen) mit der jeweiligen Basis zu multiplizieren, dann die nächste Ziffer zu addieren und die Summe wieder mit der Basis (base-2 für Binärzahlen und base-16 für Hexadezimalzahlen) zu multiplizieren. Man macht dann so lange damit weiter, bis es nichts mehr zu addieren gibt:

Nehmen wir als Beispiel die hexadezimale 73CC16:

7 × 16 + 3 = 115 × 16 + 12 = 1.852 × 16 + 12 = 29.64410

Wie man sieht, ist die Dezimalzahl etwas länger, binär ist sie mit  sogar vier Mal länger. Das ist der Grund, warum in der Datenverarbeitung oft mit Hexadezimal, statt mit Binär- oder Dezimalzahlen gearbeitet wird.

Hexadezimal- in Binärzahlen umzuwandeln ist vergleichsweise einfach, Hexadezimalzahlen in Dezimalzahlen dagegen eine größere Herausforderung. Aber mit dem besagten Horner-Schema muss man dafür in der Regel nicht mal einen Taschenrechner bemühen, umgekehrt schon eher. Das Gute daran ist, dass jedes Zwischenergebnis schon die dezimale Entsprechung der Ziffern bis dahin ist. 7316 zum Beispiel ist wie oben zu sehen die dezimale 115.

Zum Umwandeln von Dezimalzahlen in andere Stellenwertsysteme kann man die Zahl entweder in das X-fache der jeweiligen Stellenwerte zerlegen oder die Divisionsmethode mit ganzzahligen Restwerten anwenden.

zum Beispiel lässt sich in  zerlegen, woraus sich die Hexadezimalzahl 137B16 ergibt. B steht dabei für die Zahl 11.

Teilt man die 4.987 ständig durch 16 und liest die ganzzahligen Restwerte aufwärts, kommt man auf dasselbe Ergebnis:

4.987 ÷ 16 =

311 ÷ 16 =

19 ÷ 16 =  

1 ÷ 16 =

311

19

1

0

  R11 (B)

R7

R3

R1

 

Aus den aufwärts oder von hinten nach vorne gelesenen Restwerten ergibt sich wieder die gesuchte Hexadezimalzahl 137B16. Das Umwandeln von hexadezimal in binär ist somit einfach, denn die 1 vorne entspricht der binären 0001, die 3 der binären 0011, die 7 der binären 0111 und das B der binären 1011, zusammen also .

Binäre Zahlen werden zur besseren Übersichtlichkeit wie hier meist in 4er-Gruppen dargestellt, die auch als auch als Nibbles oder Halbbytes bezeichnet werden. Macht man daraus 3er-Gruppen, ist es wiederum ein Leichtes, die binäre Zahl ins Oktalsystem (Base-8) umzuwandeln, bei dem die erste der drei Bits als 2² zählt, die zweite als 2¹ und die dritte als 2⁰, sprich 1.

Wem von dem ganzen Umrechnen schwindelig ist, dem sei die folgende um Duodezimalzahlen (b ase-12) erweiterte Umwandlungstabelle empfohlen:

 

Umwandlungstabelle für die
gängigsten Stellenwertsystem
DEZ HEX OKT DDZ BIN
0 0 0 0 0000
1 1 1 1 0001
2 2 2 2 0010
3 3 3 3 0011
4 4 4 4 0100
5 5 5 5 0101
6 6 6 6 0110
7 7 7 7 0111
8 8 10 8 1000
9 9 11 9 1001
10 A 12 T 1010
11 B 13 E 1011
12 C 14 10 1100
13 D 15 11 1101
14 E 16 12 1110
15 F 17 13 1111
16 10 18 14 1 0000

 

Statt T und E (Ten und Eleven) kann man im Duodezimalsystem auch A und B oder ↊ und ↋ für 10 und 11 schreiben. Letzteres ist übrigens uralt und findet sich untern anderem in unserer Zeit- und Kalendereinteilung in 12 Stunden und 12 Monaten und ebenso auch in Zahlenwerten wie Dutzend sowie in englischen und anderen älteren Maßeinheiten wieder. Ein englischer Zoll (Inch) entspricht zum Beispiel einem Zwölftel oder 12⁻¹ eines englischen Fußes oder Foot, eine englische Unze ein Zwölftel eines englischen Pfunds (Pound).  

Rechnen ist wie Zählen bei anderen Stellewertsystemen

Wie man sieht, sind dezimale, hexadezimale, oktale und duodezimale Zahlen oder genauer Ziffern bis einschließlich 7 alle gleich. Ab der dezimalen 8 scheiden sich die Geister und dann muss man je nach Stellenwertsystem abwärts oder aufwärts rechnen. So ergibt sich aus der dezimalen 8 eine oktale 10 und aus der hexadezimal 10 eine dezimale 16 und eine oktale 20. Bei den binären Zahlen muss man besser mindestens eine 0 voranstellen, weil die erste 1 sonst als minus des jeweiligen Stellenwertes gezählt werden könnte.

Zu erklären, wie man binär, hexadezimal, oktal oder dezimal rechnet, würde hier zu weit führen. Aber wenn man weiß, dass die Basis in jedem Stellenwertsystem 10 ist, muss man entlang der Tabelle oben nur auf und abwärts zählen, um jeweils addieren oder subtrahieren zu können.

Wer zum Beispiel nicht auswendig weiß, was 7 + 8 ist, wird vielleicht un bewusst die Differenz von 7 zur 10 (sprich 3) von der 8 abziehen und den Übertrag 1 unter die nächste Ziffernstelle setzen. Genauso kann man auch A + F hexadezimal ausrechnen. Die Differenz zur hexadezimalen 10 (der dezimalen 16) von A (der dezimalen 10) ist 6, und zieht man die 6 von F (sprich 15) ab, erhält man 9 und einen Übertrag 1. A + F ist also 19 im Hexadezimalsystem und 16 + 9 oder 25 im Dezimalsystem, 31 im Oktalsystem, 21 im Duodezimalsystem und  im Binärsystem.