AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Information und deren Repräsentation/Darstellung
Tutorial durchsuchen
Ansicht
Themen-Optionen

Information und deren Repräsentation/Darstellung

Ein Tutorial von Olli · begonnen am 15. Jun 2006 · letzter Beitrag vom 16. Jun 2006
Antwort Antwort
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:
0000 0000
0000 0001
0000 0010
0000 0011
0000 0100
.
.
.
1111 1111
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:

Code:
0 0
0 1
0 2
0 3
0 4
.
.
.
F F
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:

Code:
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
(b steht für binär, h für hexadezimal und ohne Suffix ist dezimal)

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 Unicode. Unicode gibt es inzwischen in verschiedenen Formen, die bei Windows NT und damit für uns relevanteste Form ist UCS-2. Für jedes Zeichen ist ein 16bit-Wert reserviert (genaugenommen stimmt das nicht, aber das ginge jetzt zu sehr ins Detail). Somit kann jede Darstellung eines Zeichens eindeutig einem Wert zugeordnet werden. Beispielsweise ist das russische Yu von vorhin jetzt mit dem Wert $042E (dezimal 1070)vertreten (also offenbar ein Wert größer als 255).
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 ...
 
Benutzerbild von dizzy
dizzy

 
Delphi 7 Enterprise
 
#2
  Alt 16. Jun 2006, 00:45
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 . Aber man kommt bei diesem Thema doch recht fix in die Philosophie, vor allem wenn man sich von dem Blick auf die EDV löst - letztlich ist alles Information was der Mensch wahrnimmt. Alles.


Narf, da haste ja nen Thema getroffen, über dass ich nur zu gern grübel ^^
Fabian K.
  Mit Zitat antworten Zitat
Olli
 
#3
  Alt 16. Jun 2006, 08:35
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.
  Mit Zitat antworten Zitat
grips-net
 
#4
  Alt 16. Jun 2006, 09:18
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz