|
![]() |
Olli
Da auch dieseswelches Thema in letzter Zeit bedenklich häufig auftaucht, wollte ich doch unbedingt mal etwas Senf dazugeben.
Irgendwie scheint bei vielen Leuten Verwirrung zu bestehen, wie sich die Information von deren Repräsentation unterscheidet. Da will man "Hex an den COM-Port schicken" oder "ANSI und ASCII unterscheiden" ... traurig, welche Grundlagen da zu fehlen scheinen. Das Byte Das Byte ist die kleinste nichtteilbare Dateneinheit und wird üblicherweise auf 32bit-PCs als ein Block aus 8 Bits angesehen. Diese 8 Bits kann man zwar einzeln manipulieren, man kann jedoch das Byte nicht noch einmal so zerlegen, daß daraus 8 einzelne Bit werden. Byte ist auch ein Typ in Delphi und entspricht dort direkt der oben beschriebenen Entität. Es handelt sich um eine 8 Bit breite vorzeichenlose Zahl. Das bringt uns dahin, daß wir wissen, daß ein Bit entweder den Wert 0 oder 1 annehmen kann und dementsprechend bei 8 Bit ganze 2^8 (zwei hoch 8) oder 256 verschiedene Zahlenwerte möglich sind. Diese Zahlenwerte kann man nun binär darstellen (Repräsentation!):
Code:
Die Trennung in zwei Viererblöcke von Binärstellen erfolgte mit Absicht. Vier Binärstellen nennt man Nibble (oder Halb-Byte). Obwohl ein Nibble natürlich wiederum kleiner als ein Byte ist und deshalb nicht einzeln stehen kann, spielt es eine wesentliche Rolle bei der Repräsentation der Zahlen in Hexadezimalform:
0000 0000
0000 0001 0000 0010 0000 0011 0000 0100 . . . 1111 1111
Code:
Auch hier habe ich die Nibble einmal getrennt, so daß man sehen kann, daß ein Nibble einer Stelle in der Hexadezimaldarstellung entspricht. So kann man sich die Konvertierung von der Binär- in die Hexadezimaldarstellung erleichtern, indem man sich eine kleine "Tabelle" erstellt und die Binärwerte den Hexadezimalwerten gegenüberstellt:
0 0
0 1 0 2 0 3 0 4 . . . F F
Code:
(b steht für binär, h für hexadezimal und ohne Suffix ist dezimal)
0000b = 0h = 0
0001b = 1h = 1 0010b = 2h = 2 0011b = 3h = 3 0100b = 4h = 4 0101b = 5h = 5 0110b = 6h = 6 0111b = 7h = 7 1000b = 8h = 8 1001b = 9h = 9 1010b = Ah = 10 1011b = Bh = 11 1100b = Ch = 12 1101b = Dh = 13 1110b = Eh = 14 1111b = Fh = 15 So kann man Binärzahlen also von rechts nach links in Viererblöcken nach hexadezimal konvertieren und füllt fehlende Stellen (zum Viererblock) nach links mit Nullen auf. Hier haben wir schon das erste Beispiel für Repräsentation versus Information. Obwohl man offensichtlich etwas anderes sieht wenn man einmal 15 und einmal Fh schreibt, ist der dahinterstehende Wert der gleiche. Ab nun verwende ich für die Hexadezimalform das $ und für die Dezimalform keinen Präfix, entsprechend der Delphi-Syntax. Das Zeichen Zeichen sind eine Darstellungsform. Die Tatsache, daß wir üblicherweise das Zeichen $41 (auch #$41) als 'A' sehen, sagt nichts darüber aus, ob dieses Zeichen in einer anderen Kodierung nicht ganz anders aussehen könnte als der lateinische Buchstabe A. Nun gibt es aber zum Glück die allgemein anerkannte Kodierung ASCII, die die ersten 128 Zeichen (Werte 0 bis 127) standardisiert, so daß diese im Grunde überall gleich dargestellt werden. Jedoch schon bei EASCII, jenem Standard der noch die Zeichenwerte von 128 bis 255 dem ASCII-Standard hinzufügt, gibt es verschiedene Kodierungen (westlich, kyrillisch, arabisch ...). Dort wird beispielsweise der Wert $9D für den Buchstaben Ю (russisches großes Yu) für kyrillisch verwendet, wohingegen in westeuropäischer Kodierung ein Ø (verwendet zB. im Dänischen, wie Ö) dargestellt wird. Ein Wert kann also auch noch als Zeichen unterschiedliche Darstellungsformen haben. Aber jetzt kommt der Hammer. Kluge Leute haben sich gedacht, daß für alle Zeichen die es auf der Welt so gibt, die Byte-Werte niemals ausreichen können. Schon zwischen der US-Kodierung und der westeuropäischen Kodierung von EASCII gibt es ja Unterschiede. Man mußte sich also etwas anderes einfallen lassen. Und das war ![]() Natürlich muß ein Programm genau diese Kodierung, Unicode, kennen um sie korrekt darstellen zu können. Würde es die Zeichen als 8bit-Zeichenwerte interpretieren, käme eine komplett andere Darstellung heraus. Und dennoch ist jedes dieser filigranen und weniger filigranen Zeichen für den PC nur eine Zahl und wird auch so abgespeichert. Nur weil wir einen Hexeditor haben, können wir diese Zeichenwerte in Hexadezimaldarstellung anzeigen lassen, nur weil wir Notepad haben, können wir die russischen Unicode-Texte auch lesen. So ist es immer dem Programm überlassen, wie es eine bestimmte Zahl darstellt, ob nun als Zeichen, als Dezimalzahl, als Hexadezimalzahl oder komplett anders. Zahl bleibt Zahl, nur die Darstellung ändert sich. Es gibt viele verschiedene Kodierungsformen, aber wir dürfen uns nicht verleiten lassen, von der Kodierung auf die Darstellung zu schließen. So nimmt es doch jeder von uns als gegeben hin, daß wir Delphi-Quelltext schreiben und dieser nach dem Kompilieren vom Prozessor verstanden wird. Auch hier ist der Delphi-Quelltext nur eine menschenfreundliche Darstellung dessen was der Compiler später daraus macht ... Ich hoffe dieser kurze Beitrag trägt zum Verständnis des Problems bei ... |
Olli |
Delphi 7 Enterprise |
#2
Ein wichtiges Thema, und gut umrissen. Ich würde lediglich nur nochmals hervorheben, dass man sehr sehr genau zwischen Information und einer Darstellung unterscheiden muss. Das ist der Kern vieler Missverständnisse dahingehend. Und man kommt von einer Darstellung zu der Information lediglich über eine Konvention, also einer allgemeingültigen (oder für den entsprechenden Zielkreis gültigen) Übereinkunft, wie eine Darstellung zu interpretieren ist.
Verschlüsselungsverfahren sind z.B. nicht mehr, als eine Änderung der Darstellung ein und der selben Information. Die Konvention dazu wäre dann der Schlüssel für die Rückwandlung, incl. des dazu nötigen Vorgehens. Information an und für sich ist ein ganz verrücktes Ding. Sie ist für sich selbst nämlich komplett darstellungsfrei, und wird im Grunde erst durch die Verbindung von Darstellung und Konvention "existent gemacht". Information die nicht dargestellt ist, ist also de facto nicht existent. Über den Punkt "Konvention" wird Information als abstrakter Begriff zu einer subjektiven Angelegenheit, was sich durch Festlegungen wie z.B. ASCII minimieren lässt. Sonst würde man sich laufend missverstehen =) Das wiederum wirft eine geradezu philosophische Frage auf: Ist Information ohne Darstellung überhaupt existent? Ist sie es, wenn sie nur nicht interpretierbar ist? Das gehört denke ich aber nicht in voller Breite hier ausdiskutiert ![]() Narf, da haste ja nen Thema getroffen, über dass ich nur zu gern grübel ^^
Fabian K.
|
![]() |
Olli
|
#3
Danke dizzy. Ich finde, du hast es sehr gut nochmal zusammengefaßt. Schade, daß das Interesse an so einem langweiligen Thema offenbar gerade an denen vorbeigeht, die sich damit beschäftigen müßten.
Übrigens kommt es auf das philosophische Weltbild an, welchem du anhängst, ob Information auch dann existiert, wenn sie keine Darstellung hat. Erstens ist die Frage an sich schon sehr anthropozentrisch und zweitens könnte man umgekehrt fragen, ob denn die Informationen, die wir bestimmten Darstellungen zu entnehmen vermeinen wirklich die sind, die wir "herauslesen". Man nehme nur Newtons und Einsteins Vorstellung von Gravitation im Vergleich ... aber ich schweife ab. |
![]() |
|
#4
Ich finde die Erklärung von Olli super und möchte ihm hiermit herzlich danken.
Bei uns lernen Praktikanten im Bereich Webdesign das Unterscheiden zwischen Binär-, Dezimal- und Hexdezimalzahlen und üben dies am Mischen von Farben für Internetseiten. Hier können die zu mischenden Farben im RGB-Schema aus den Grundfarben Rot, Grün und Blau zusammengesetzt werden. Die einzelnen Farben können dabei Werte zwischen 0 und 255 annehmen, was in hexadezimal schreibweise dargestellt wird. Will mann also ein strahlendes rot darstellen, muss der Wert für rot ganz hoch (255), grün und blau ganz niedirg (0) eingestellt werden. Der RGB-Wert 255/0/0 entspricht dann dem Hexadezimalwert #FF0000. ... (wir wollen das hier jetzt nicht weiter vertiefen) Auch diese "Farbenlehre" ist wieder ein sehr gutes Beispiel an dem man den Unterschied zwischen Information und Repräsentation erkennt. An Olli nochmals ein nettes Dankeschön für die Grundlageninformation. Ich wünsche mir auf Delphi-Praxis öfters solche kleineren Einschübe. Diese helfen mir und vielen, vielen anderen selbstlernenden Programmierern Lücken zu füllen. Schöne Grüße aus dem Saarland. Michael |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |