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!