IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Codierungen - Hexadezimalsystem, Binärsystem



Hexadezimalsystem, Binärsystem

Dieses Dokument erklärt das Hexadezimalsystem, das Binärsystem und die Farbdarstellung in HTML-Dateien.


Autor: Rolf Viehmann (Rolfhub)
Datum: 29-01-2002, 10:33:51
Referenzen: keine
Schwierigkeit: Anfänger
Ansichten: 39111x
Rating: 5.67 (3x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Version dieses Dokuments: 1.1.1

Einleitung

"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:

Dezimalsystem, Stellenwertsysteme allgemein

"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 addiere.

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:

Hexadezimalsystem

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.

Zusätzliche Ziffern

Wir haben noch ein Problem.
Wieso? Nun, wir sagten, wir könnten jede Zahl umrechnen, 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).

Vorteile des Hexadezimalsystems

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. Durch das (Bildschirm-)platzsparende Hex-System lassen sich einige Bytes mehr auf dem Bildschirm darstellen, als wenn von jedem Byte die dezimale Darstellung angezeigt würde.

Woher kennen wir das noch?
Genau, Farbangaben in HTML-Dateien.

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 niedrigstwertigste 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".

Binärsystem

Mit dem Wissen, das wir jetzt haben, können wir auch andere Zahlensysteme verstehen, z.B. das Binärsystem (=Dualsystem), das alle Computer intern benutzen. Um genau zu sein, können wir jetzt alle Stellenwertsysteme verstehen, denn diese funktionieren alle nach diesem Schema, sie unterscheiden sich nur durch die verwendete Basis (natürliche Zahl größer/gleich zwei) und durch die verwendeten Symbole.
Ein Beispiel zum Binärsystem:

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 Integer-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.
Wie die negativen Zahlen genau gespeichert werden, wird später noch etwas genauer erklärt.

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.

Speicherung negativer Zahlen

Ich habe oben so einfach von einem Vorzeichenbit gesprochen, und man kann auch tatsächlich am höchsten Bit einer Integer-Variablen das Vorzeichen erkennen (ich rede hier natürlich die ganze Zeit von einem signed integer). Ganz so einfach wie oben erklärt, ist es jedoch nicht. Es wird vielmehr die Zweierkomplement-Darstellung benutzt.

Um eine Zahl in Zweierkomplement-Darstellung zu speichern, muss folgendermaßen vorgegangen werden:
  • Zuerst wird der Betrag der Zahl normal gespeichert
  • Danach wird die komplette Variable invertiert (alle 16, 32, oder wie-viele-auch-immer Stellen) (Genannt: "Stellenkomplement")
  • Jetzt wird noch die Zahl 1 addiert.
Beispiel: Signed Short Integer (=16 Bits):
Zu speichernde Zahl: -5
Betrag: 5
Binär: 101
Variable: 0000000000000101
Stellenkomplement: 1111111111111010
Endergebnis: 1111111111111011

Wobei der Prozessor natürlich die notwendigen Schritte selbstständig durchführt, er kennt unter anderem Befehle zur Bearbeitung von vorzeichenlosen und von vorzeichenbehafteten Integern.

Motivation Doch warum diese etwas umständlich anmutende Darstellung? Ich zitiere Wikipedia.org:
Nachteil der Verwendung eines Vorzeichenbits ist, dass beim Addieren von Zahlen Fälle unterschieden werden müssen. Addiert man eine positive und eine negative Zahl, muss stattdessen die negative Zahl von der positiven subtrahiert werden. Bei der Codierung von ganzen Zahlen wird deshalb heute meist das Zweierkomplement verwendet. Vorzeichenbits finden jedoch bei Gleitkommazahlen Anwendung.
Quelle: [http://de.wikipedia.org/wiki/Vorzeichenbit]

Abschlusstipps
  • 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.
  • Linux-Nutzer: Der Taschenrechner "bc" kann mit nahezu beliebigen Eingabe-/Ausgabebasen umgehen, näheres erläutert die Manpage. Den bc gibt es übrigens auch für Windows, wer ihn also schätzen gelernt hat, muss nicht mehr auf ihn verzichten.
  • Programmierer: In fast jeder Programmiersprache kann man Zahlenwerte nicht nur dezimal, sondern auch hexadezimal, oft auch binär oder gar oktal angeben, die genaue Syntax variiert.


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04511
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06248
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1158
Comments: 0