Dieses Dokument erklärt das
Hexadezimalsystem, das Binärsystem und die Farbdarstellung in HTML-Dateien.
'Hexa-WAS?!?'
'Hexadezimal' steht für '16', die Zahl Sechzehn.
Dies sagt schon mal was über das System aus: es basiert auf der Zahl 16.
Unser normales Dezimalsystem baut dagegen auf der Zahl 10 auf, (Dezimal=Zehn).
Bevor ich nun das Hex-System erklären kann, muss ich ein wenig ausholen, und
das Dezimalsystem erklären:
'32'
Eine normale Zahl in unserem Dezimal-System.
Ich kann diese auch durch eine kleine Rechenaufgabe darstellen:
3*10
+
2*1
=
32
Eine andere Zahl:
5634
=
5*1000
+
6*100
+
3*10
+
4*1
Merken wir was? Natürlich, jede Stelle hat die zehnfache Wertigkeit der
vorhergehenden.
Ich könnte auch sagen:
5634
=
5*10 hoch 3
+
6*10 hoch 2
+
3*10 hoch 1
+
4*10 hoch 0
Jede Zahl lässt sich also aus den einzelnen Stellen zusammenbasteln, indem ich:
1. Jede Stelle mit einem Faktor malnehme,
2. und dann alle Ergebnisse zusammenzähle.
Den Faktor bestimme ich, indem ich die Basis 10 nehme, und, von rechts
beginnend, anfange zu zählen. Ich potenziere dann die Basis mit dem Wert, den
ich beim Zählen gefunden habe, wobei ich allerdings bei 0 anfange zu zählen.
Die Stelle ganz rechts hat immer (nicht nur im Dezimalsystem) den Faktor 1
(=[Basis des Zahlensystems] hoch 0, und x hoch 0 = 1).
Wir wissen nun, wie unser Zahlensystem (Dezimalsystem) aufgebaut ist, also
gehen wir zum Hexadezimalsystem, einem anderen Stellenwertsystem, über:
0x20
Eine Zahl im Hex-System ('0x' soll bedeuten, dass dies eine
Hex-System-Zahl ist, und keine Dez-Sys-Zahl)
Hinweis: Die Schreibweise '0x[Zahl im Hex-System]' entstammt der Syntax
der Programmiersprache C, unter (Visual)Basic ist die Schreibweise
'&H[Zahl im Hex-System]' üblich.
Die eigentliche Zahl ist also:
'20'
Was machen wir damit? Ganz einfach, einfach jede Stelle mit ihrem Faktor, also
ihrem Stellenwert malnehmen:
0x20
=
2*16
+
0*1
=
32 (Dezimal)
Das Schema ist genau gleich, was sich geändert hat, ist der Faktor.
Der Faktor '1' für die Stelle ganz rechts ist ja immer gleich, aber
der Faktor für die linke Stelle ist anders, nämlich
16(='Hexadezime'(Lateinisch))
Was ist, wenn wir die Zahl
0x4521
umrechnen wollen?
0x4521=
4*16*16*16 (=4096 =16 hoch 3)
+
5*16*16 (=256 =16 hoch 2)
+
2*16 (=16 =16 hoch 1)
+
1*1 (=1 =16 hoch 0)
=
17697
Spätestens jetzt dürfte der Sinn der obigen Grundschul-Rechen-Übungen
klargeworden sein.
Wir können jetzt jede Zahl im Hex-System in unser gewohntes System umrechnen.
Noch zwei Anmerkungen:
1. Was hat die Zahl 0x20 = 32 dez. für eine Bedeutung, die taucht doch schon
wieder auf*?
Ganz einfach, es ist der ASCII-Code für das Leerzeichen. Für nähere Infos bitte
das Dokument über ASCII-Codes abrufen.
*Schon wieder? Ich verwies im Dokument über URLs auf das vorliegende Dokument.
2. P R O B L E M !
Wieso? Nun, wir sagten, wir könnten jede Zahl
umrechenen, aber dazu müssen wir noch was wissen:
Jeder kennt die Ziffern 0123456789, zehn Ziffern, die im Dezimalsystem benutzt
werden, und auch im Hexadezimal-System.
Das reicht aber nicht: denn eine 1 in der zweiten Stelle von rechts in einer
Hex-Zahl ist ja schon 16 wert, und die höchste Zahl, die wir mit nur einer
Ziffer darstellen können, ist 9!
FALSCH, wir können _im Dezimalsystem_ max. 9 mit einer Ziffer darstellen, im
Hex-System gibt es nämlich 16 Ziffern, mit Werten von 0 bis 15, denn 16 können
wir ja als 0x10 darstellen.
Diese Ziffern lauten:
0123456789ABCDEF
wobei A den Wert 10 hat, F den Wert 15, die anderen Buchstaben entsprechend.
Allgemein kann man sagen, dass jedes Stellenwertsystem so viele Ziffern
benötigt, wie die Basis groß ist, wenn wir also ein Stellenwertsystem mit der
Basis 36 benutzen wollten, könnten wir die Ziffern 0 bis 9, und dann die
Buchstaben A bis Z benutzen, Z hätte den Wert 35 (dez).
Dadurch, dass es mehr Ziffern gibt (0 bis F), werden große Zahlen in ihrer
Darstellung im Hex-System kürzer, als im Dezimal-System.
Ein Beispiel:
FFFFFFFF
ist eine Hex-Zahl, und im Dezimalsystem wäre diese Zahl
4294967295
wert!
Noch deutlicher sieht man den Unterschied, wenn die Zahl noch größer ist:
FFFFFFFFFFFFFFFF
=
18446744073709551615
Zahlen werden also kürzer, aber es gibt noch einen Grund, warum das Hex-System
praktisch ist:
die größte zweistellige Hex-Zahl ist:
FF (= 255 dez.)
und dies ist genau die größte Zahl, die sich mit einem Byte darstellen lässt.
Wir können also eine Datei öffnen, für jedes Byte die Hexadezimal-Zahl
berechnen, und diese hat immer nur max. zwei Stellen pro Byte.
Was haben wir jetzt? Genau, einen Hex-Editor, der also für jedes Byte einer
Datei die Hex-Zahl anzeigt, immer zweistellig, evtl. mit führender 0.
Woher kennen wir das noch?
Genau, Farbangaben in HTML-Dateien.
Uns ist vielleicht schon mal ein Abschnitt in einer HTML-Datei aufgefallen, in
dem eine Farbe definiert wurde:
[] <body
bgcolor='#3399CC' []
#3399CC
ist auch wieder eine Hex-Zahl, mit sechs Stellen, wir haben also den Inhalt von
drei Bytes vor uns.
Das höchstwertigste Byte hat den Wert 33 (=51 dez.)
Das mittlere Byte hat den Wert 99 (=153 dez.)
Das nidrigstwertigste Byte hat den Wert CC (=204 dez.)
Was sagen diese Bytes aus?
Nun, es sind Farbangaben, das '33'-Byte links gibt den Rot-Wert an.
'99' ist der Wert für den Grün-Kanal, und 'CC' ist
schließlich der Blau-Wert.
Gültige Werte für Rot, Grün und Blau sind also jeweils 0 bis FF (0 bis 255
dez.)
'0' bedeutet also, dass der Hintergrund überhaupt nicht Rot (oder
Grün oder Blau) ist, während
'FF' festlegt, dass die Intensität von Rot (Gr, Bl) maximal sein
soll.
Mit den drei Grundfarben Rot, Grün, Blau kann man jede beliebige Farbe
zusammenmischen, die man haben möchte, Stichwort 'Additive
Farbmischung'.
Zusatzinfo:
Mit dem Wissen, das wir jetzt haben, können wir auch andere Zahlensysteme
erklären, z.B. das Binärsystem (=Dualsystem), das alle Computer intern
benutzen:
10100101
ist eine Dualzahl:
1*128 (= 2 hoch 7)
0*64 (= 2 hoch 6)
1*32 (= 2 hoch 5)
0*16 (= 2 hoch 4)
0*8 (= 2 hoch 3)
1*4 (= 2 hoch 2)
0*2 (= 2 hoch 1)
1*1 (= 2 hoch 0)
=
165 (dez.)
=
0xA5
Ich denke, jeder wird in der Lage sein, das Binärsystem zu verstehen, aber es
gibt zwei interessante Details zu bemerken:
1.: Es gibt nur zwei Ziffern, 0 und 1, Strom und kein Strom, An oder Aus, True
oder False,
Ein solcher entweder/oder -Zustand lässt sich sehr gut durch Ladungen in
Kondensatoren (RAM) oder als Ausrichtung von Magnetpartikeln (Festplatte)
speichern, und schon haben wir verstanden, warum der Computer intern das
Dualsystem (=Binärsystem) verwendet.
Mit genügend vielen Bits lässt sich jede natürliche Zahl speichern.
Wieso nur natürliche? Richtig, man kann natürlich auch ein Bit für das
Vorzeichen benutzen, und schon können wir, nur mit 1en und 0en, jede beliebige
ganze Zahl speichern.
Für Programmierer: Jetzt können wir auch verstehen, wie die ober- und
Untergrenzen für die verschiedenen Datentypen zustande kommen.
Beispiel: 'Signed Short Integer (=16 Bits)'-> 1 Vorzeichenbit, 15
Bits für die Zahl, führt zu der Obergrenze von 32767 und der Untergrenze von
-32767.
Da man aber +0 = -0 behaupten kann, können wir entweder die Obergrenze um eins
erhöhen, oder die Untergrenze um eins erniedrigen.
2.: Mit einer Hex-Ziffer können wir Zahlen von 0 bis F (=15) speichern, genau
wie mit vier Bits (=Binär-Stellen):
1*8 (2^3)
1*4 (2^2)
1*2 (2^1)
1*1 (2^0)
=15, mit einer Hex-Stelle können wir also genau ein halbes Byte (=4 Bits)
darstellen, mit zweien also ein ganzes Byte, wir haben das oben schon
festgestellt, aber jetzt ist es plausibel.
Tip für Windows-Nutzer: Der normale Taschenrechner kennt das Hex-System, das
Dez-System, das Oktalsystem (Basis 8), sowie das Binärsystem.
Man muss ihn allerdings im Menü 'Ansicht' von 'Standard'
auf 'Wissenschaftlich' umstellen!