Pdf

Werbung
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 HexSystem 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 DezSystem, das Oktalsystem (Basis 8), sowie das Binärsystem.
Man muss ihn allerdings im Menü "Ansicht" von "Standard" auf "Wissenschaftlich"
umstellen!
Herunterladen