Ich begrüße euch herzlich zur Vorlesung.
Wir haben zwei tolle Werbungsblöcke, einmal für die Hardware und
einmal für die Software.
Zwei natürlich sehr wesentliche Teile der Informatik, die, wie wir
immer betonen in der Vorlesung, Digitale Technik, Entwurfsverfahren
oder Rechnerorganisation, unzertrennbar, vor allem wenn man an
Robotikanwendungen oder Robotik allgemein denkt.
Aber heute wollen wir weitermachen mit Gleitkommazahlen.
Das ist der Begriff auch für Fließkommazahlen.
Das heißt, beide Varianten sind da, lasst euch nicht irritieren.
Und was wir das letzte Mal gesehen haben, wir haben gesehen, dass wir
bei Gleitkommazahlen,
das heißt, diese Zahlen, die werden nicht wie vorgestellt, sondern die
werden in Betrag-Vorzeichenform dargestellt.
Und in den unterschiedlichen Maschinenformate oder
Maschinenwortformate müssen wir also ein Bit für das Vorzeichen
vorsehen.
Das erkennt man hier anhand von diesem IEEE-Standard oder
Maschinenwortformat vom IEEE-Standard für Fließkommazahlen.
Das heißt, das höchstwertige Bit ist bei diesem Format immer das
Vorzeichen -Bit.
Daran schließen sich eine Menge von Bits.
Einmal oben sehen wir 8 Bit für die Charakteristik, die dafür
zuständig ist, dass man eigentlich den Exponenten darstellt.
Wir haben gesagt, dass der Exponent in Form der Charakteristik
dargestellt wird.
Und der Rest, also die niedrigwertigen Bits von 0 bis 22 im oberen
Beispiel, die sind für die Mantissi, also mehr oder weniger für den
Betrag der Zahl.
Und ich habe gesagt, je mehr wir Bits für die Mantissi haben, desto
genauer wir Zahlen im Rechner darstellen.
Wir wissen, dass hier die Bits an der Stelle 22 die Stellenwertigkeit
2 hoch minus 1 hat und das 0.
Bit die Stellenwertigkeit 2 hoch minus 23.
Unten haben wir 52 Bits für die Mantissi, das heißt, das Bit an der 0.
Stelle hat die Stellenwertigkeit 2 hoch minus 52.
Allgemein, was kann man damit machen?
Wir haben gesehen, dass wir mit 32 Bits anhand von dem Beispiel, was
wir letztes Mal behandelt haben, 2 hoch 32 unterschiedliche
Bitkombinationen haben und somit 2 hoch 32 unterschiedliche Zahlen
darstellen können.
Wir haben gesehen, dass diese Zahlen beim Festkomma-Format, das war
das Format A, von 2 hoch 31 minus 1 bis minus 2 hoch 31 darstellbar
sind.
Wir haben gesagt, dass die Zahlen beim Festkomma-Format equidistant
zueinander auf dem Zellenstrahl liegen, was bei Gleitkommazellen nicht
der Fall ist.
Format B und Format C, wenn ihr euch erinnert.
Aber jetzt zurück zu diesem Standard.
Das ist eine Standarddarstellung von Gleitkommazellen im Rechner, was
von IEEE vorgeschlagen wird und heute in den Rechnern angewandt wird.
Allgemein lässt es sich sagen, wenn wir das 32-Bit-Maschinenformat
betrachten, dass wir mit 8-Bit, 2 hoch 8, also 255 unterschiedliche
Charakteristiken haben.
Das heißt hier, wir haben 8-Bit, daraus folgt, wir haben 2 hoch 8 ist
gleich 256 unterschiedliche Charakteristiken, die wir darstellen
können.
Und mit 23-Bit wissen wir, dass wir 2 hoch 23 unterschiedliche
Mantissen darstellen können.
Das heißt, die Anzahl der Zahlen, die wir in diesem Format darstellen
können, ist 2 hoch 8 mal 2 hoch 23.
Dazu kommt es, dass wir noch ein Vorzeichen-Bit haben.
Das heißt, wir können sowohl positive als auch negative Zahlen.
Also 2 mal 2 hoch 8 mal 2 hoch 23.
Das gleiche natürlich analog dazu.
Hier haben wir 2 hoch 11 unterschiedliche Exponenten.
Und 2 hoch 52 unterschiedliche Mantissen.
Gut, wir haben ja das allgemeine Format kennengelernt.
Das ist jetzt hier ein Beispiel.
Wenn es IEEE Standard ist, dann wissen wir mit 32-Bit, dass die Bits 0
bis 23, wo die Mantissen verantwortlich sind oder die Mantissen
darstellen, 24 bis 30 die Charakteristiken.
Wir wissen, dass die Basis bei dieser Darstellung 2 ist.
Das heißt, diese Basis muss man nicht explizit darstellen.
Wir wissen, dass in dieser Schreibweise, wie wir die Zahlen jetzt
angeben werden, werden diese Mantissen in dualer Schreibweise, also 0
,10 usw.
dargestellt.
Aber für die Exponenten schreiben wir immer 2 hoch zum Beispiel 13.
Wir schreiben diese 13 jetzt nicht in dualer Form.
Das ist nur eine Geschmackssache.
Da braucht man aber viel mehr Platz.
Sondern wir schreiben den Exponenten in Dezimal.
Das bedeutet aber nicht, da hat der eine gefragt nach der letzten
Vorlesung, dass der Exponent im Rechner im Dezimal dargestellt ist.
Also sollte hier auf gar keinen Fall der Eindruck entstehen.
Und wir wissen, dass man Gleitkommazellen normalisiert.
Und wir haben gesagt, normalisiert heißt, die Mantisse zwischen 1
durch b und kleiner als 1.
Also im Dualsystem, wenn die Basis 2 ist, soll die Mantisse zwischen 0
,5, also größer als 0,5, aber kleiner als 1 sein.
Damit diese führende 1 der Mantisse direkt am Komma ist.
Und beim IEEE-Standard geht man einen Schritt weiter und sagt, diese
führende 1 der Mantisse, wenn man annimmt, dass man immer dort eine 1
hat, haben wir gesagt, dass man diese 1 nicht darstellen muss,
explizit darstellen muss.
Man muss aber im Kopf behalten, dass es dort eine 1 gibt.
Und beim IEEE-Standard geht man einen Schritt weiter und sagt, die
Normalisierung erfolgt dadurch, dass die 1 vor dem Komma steht, nicht
hinter dem Komma.
Also nicht 0,10000 irgendetwas, sondern 1,00++ irgendwas.
So, jetzt eine kurze Frage hier und zwar zu diesen Feldern im
Maschinenwort -Format.
Wir haben gesehen, das höchstwertige Bit ist Vorzeichen, die nächsten
Felder ist Charakteristik und dann die Mantisse.
Meine Frage an euch jetzt, kann ich das anders machen eigentlich?
Kann ich sagen, zum Beispiel zuerst Vorzeichen, dann Mantisse und dann
Charakteristik?
Ist diese Unterteilung des Wortes, des 32-Bit-Wortes in diesem Fall,
willkürlich oder hat das irgendwelche Vorteile, dass wir diese
Reihenfolge der Unterteilung machen?
Also der Vorteil, was man hier hat tatsächlich, wenn man das übrige
Format verwendet, dass man Gleitkommazellen schneller sortieren kann.
Das heißt, man fängt zum Beispiel am höchstwertigen Bit, und wenn das
Vorzeichen -Bit unterschiedlich ist, also Negativ ist immer kleiner
als Positiv, das ist nach wie vor, sollte auch so bleiben.
Und wenn aber das Vorzeichen-Bit gleich ist, also positive Zellen oder
negative Zellen, also bei der Vorzeichnung oben, nur das nächste Bit
anzugucken.
Das heißt, dieses Sortieren oder Vergleichen von Zellen führt man
zurück auf Bit-Vergleich in den zwei Worten.
Und somit kann man natürlich viel schneller Gleitkommazellen
miteinander vergleichen und diese Zellen sortieren.
Und wie ihr euch zum Beispiel erinnert, das Vergleichen der Inhalte
von zwei Registern war auch sehr wichtig, bei dem was wir in
Rechenorganisationen kennengelernt haben, weil alle Sprungbefehle oder
Kontrollstrukturen, die wurden auf solche Vergleiche hier
zurückgeführt.
Das heißt, wir können hier schreiben, kann man es machen, natürlich,
dieses andere Format, das ist nicht zwingend, dass man die
Unterteilung Vorzeichen-Charakteristik-Mantissima, wenn man Lust hat,
kann man das machen.
Aber wenn man dieses Format in der Form hat, dann bedeutet das, dass
es einen Vorteil hat, schnelleres, einfacheres,
ich muss langsam schreiben, wie ihr merkt, einfacheres Sortieren von
GK -Zellen, also das heißt Gleitkommazellen.
Was heißt einfacheres eigentlich in dem Fall?
Also vielleicht mal kostengünstigeres, weil natürlich können wir
andere Formate nehmen und können wir den Sortiervorgang auch machen,
aber dazu brauchen wir wahrscheinlich zusätzliche Hardware, die man
dann spart, wenn man dieses Format in der Form hat.
Okay, und dann habe ich euch das letzte Mal gesagt, dass bei dem IEEE
-Format Zusammenfassung, welche Zellen und wie sieht der Zellenwert
aus, sieht wie folgt.
Das heißt, wie ich vorher erwähnt habe, wir haben 256 Charakteristiken
bei 32-Bit-Format, das Rote hier, die roten Zellen beziehen sich auf
64 -Bit-Format und wir sehen die Charakteristiken von 0 bis 255 und
wie der Zellenwert hier sich berechnet.
Also der Zellenwert allgemein natürlich, wie hier angegeben, an der
Stelle minus 1 hoch Vorzeichen mal 1,1 mal 2 hoch Charakteristiken
minus 127 bei 32-Bit.
Aber man sieht hier bei dieser Darstellung, oder wir haben auch das
letzte Mal gesagt, damit wir überhaupt die Null darstellen können,
brauchen wir ein spezielles Bitmuster, was wir für die Null
reservieren.
Und was noch dazu kommt, dass wir für ganz große Zellen, also für
Zellen, die wir nicht darstellen können, zum Beispiel plus, minus,
unendlich oder andere Zellen, die auftreten bei arithmetischen
Operationen, die man not a number nennt, also Division durch Null,
Wurzel von minus 1 und so weiter und so fort.
Da ist auch Platz bei dieser Darstellung, um solche Situationen oder
Zellen, beziehungsweise Nichtzellen darzustellen.
Und diese Situationen, oder das wird hier realisiert mit dem
Charakteristik 255.
Also 255 speziell für Overflow und für die Darstellung von not a
numbers und die Null speziell für die Darstellung der Null.
Ich will im folgenden nur kurz auf eine Sache eingehen, und zwar auf
diese Charakteristik auf den Exponenten von 2 hoch minus 126, weil wir
wissen, dass der Offset, der Offset oder das Offset, ich glaube das
Offset, dass das Offset bei 8-Bit-Charakteristik immer 128 ist, 127
ist.
Also dass der Offset hier 128, aber wir normalisieren, indem wir 1,10
schreiben, deshalb multiplizieren wir mit 2, das bedeutet, wir haben
ein Offset von 127 und das gleiche gilt auch für die ersten oberen
Zeilen.
Das heißt, normalisierte Zahlen zunächst mal werden mit
Charakteristiken zwischen 0 und 255 dargestellt, statt die
Charakteristiken 0 bis 255 und Offset zur Bestimmung des Exponenten
ist 127.
Das müssen wir hier uns merken, weil wir normalisieren, indem die
führende 1 der Mantissi vor dem Komma steht.
Also 1 Komma Mantissi und nicht 0,1 und dann der Rest der Mantissi.
So ist die Charakteristik gleich 0, so wird die Zahl als
denormalisiert dargestellt.
Das heißt, zwischen der kleinsten normalisierten Zahl, das ist Min
Real, was wir letztes Mal kennengelernt haben, zwischen dieser
kleinsten normalisierten Zahl, die man darstellen kann und 0, kann man
noch denormalisierte Zahlen darstellen und natürlich, die haben alle
die Charakteristik 0.
Wobei man bei denen natürlich die 1 explizit darstellen muss.
Das heißt, wenn wir an unsere Zahlendarstellung hier mal denken, wir
schreiben ja für die Zahl minus 1 Hoch Vorzeichen mal Mantissi mal 2
Hoch, das ist die Charakteristik 0, also 0 minus 127, laut Definition.
Und was wir hier machen, das ist gleich minus 1 Hoch Vorzeichen mal 0
Komma Mantissi,
vielleicht sollte ich mal hier nochmal explizit schreiben, dass die
Mantissi in dem Fall explizit komplett dargestellt wird, also die
Mantissi hier ist explizit,
also mit allen Bits, ohne diese implizite 1, die man für die
Normalisierung braucht.
Und das ist gleich minus 1 Hoch Vorzeichen mal 0 Komma Mantissi,
ja, mal 2 hoch 127 und das ist dann gleich minus 1 Hoch Vorzeichen mal
0 Komma Mantissi.
Somit erklärt sich der Potenz oder der Exponent, der in der Tabelle
vorher angegeben war für den Exponenten 0.
Für die Charakteristik 0.
Ok, jetzt wollen wir mal diesen Aufbau von den Zahlen in diesem
Standard mal angucken und wir werden tatsächlich bei Charakteristik 1
anfangen.
Also wir lassen zunächst mal die zwei Sonderfälle, Charakteristik 0
und Charakteristik 255 bis zum Ende.
Und ich fange bei Charakteristik 1.
Charakteristik 1 bedeutet, dass wir den kleinsten Exponenten für
normalisierte Zahlen haben und das ist ja minus 126.
Wenn der Offset 127 ist, Charakteristik 1, dann ist der Exponent minus
126, wie hier auf der Folie angegeben ist.
So, und was können wir hier darstellen?
Das heißt, wir haben hier eine Charakteristik von 1, Charakteristik
ist immer grün hier, wie man sieht.
Wir betrachten die positiven Zahlen, deshalb ist das Vorzeichen mit 0.
Die Charakteristik ist 1 und die Mantissi besteht aus lauter Nullen,
aber mit einer führenden 1.
Wir wissen ja, das sind normalisierte Zahlen und wir normalisieren,
indem die führende 1 vor dem Komma steht.
Das heißt, insgesamt haben wir 1, der rote Teil, also der Rest der
Mantissi, mal 2 hoch minus 126.
So, das ist die kleinste normalisierte Zahl, die wir hier darstellen
können, weil wir haben nach wie vor eine 1 hier und mal 2 hoch
irgendein Exponent.
So, und die haben wir als minreal betrachtet.
Die kleinste positive Zahl, die man in normalisierter Form darstellt.
Wohlgemerkt, das ist anders zu Format B und Format C von der letzten
Vorlesung, weil die Normalisierung hier bei dem IEEE Standard erfolgt
dadurch, dass die 1 vor dem Komma steht.
Also 1 mal 2 hoch minus 126 ist minreal.
Was ist die nächste normalisierte Zahl nach dieser kleinsten Zahl?
Also ich mal mal jetzt hier an der Tafel.
Das heißt, wir fangen bei den positiven Zahlen an und wir betrachten
die normalisierten Zahlen.
Und die kleinste normalisierte Zahl, die wir darstellen, könnt ihr
sehen eigentlich hier, wenn ich das schreibe.
Minreal und das ist 2 hoch minus 126.
Das kommt alles nachher auf den Folien.
Die nächste Zahl, die dazu kommt, die hat eine 1 an dieser Stelle,
also in Bit 0.
Das heißt, die nächste Zahl hat hier eine 1.
Das heißt, die Mantissi ist 1,0001 mal 2 hoch minus 126.
Wohlgemerkt, wir betrachten jetzt alle Zahlen mit dem Exponenten minus
126.
Und dann wissen wir, das ist, wenn wir jetzt den Dezimalwert
berechnen, das ist 1 plus 2 hoch minus 23 mal 2 hoch minus 126.
Was ist die nächste Zahl, die danach kommt?
Das ist eine Frage an euch.
Und ich erwarte nach wie vor Antworten, obwohl ich so weit weg von
euch bin hier.
Also nicht wie im Audimax bis zu euch laufen kann.
Ich kann laufen, aber...
Genau, genau, also der hat es korrekt gesagt.
Der hat hier eine 0 an der letzten Stelle und hier eine 1.
Und hoffentlich habt ihr das jetzt erkannt.
Das heißt, es ist 1 plus 2 hoch minus 22 mal 2 hoch minus 126.
Das bedeutet, das Spiel geht jetzt weiter.
Die nächste Zahl hat 1,1.
Wenn wir jetzt diese Bit-Kombinationen hier betrachten, die 23 Bits,
dann haben wir die Dualzahlen 0, 1, 2, 3 und so weiter und so fort.
So, und das ganze Spiel geht weiter.
Das ganze Spiel geht weiter.
Das heißt, wir machen hier Punkt, Punkt, Punkt bis 0 positiv.
Und wir sind nach wie vor bei Charakteristik 0, Charakteristik 1,
Entschuldigung.
So, das ist Charakteristik 1 und 1, 1, 1, 1, 1, 1, 1, 1.
So, das heißt, das ist die größte Zahl, die wir mit dem Exponenten
minus 126 darstellen können.
Und das ist gleich, natürlich 1,23 einzeln.
So bei 2 mal 2 hoch minus 126.
Und das ist gleich, wenn wir das rechnen, 1 plus 2 hoch minus 1 plus 2
hoch minus 2 plus und so weiter und so weiter bis 2 hoch minus 23 mal
2 hoch minus 126.
Und wir können den Zahlenwert hier rechnen.
Wir haben ja ein Trick letztes Mal gesehen.
Das heißt, 2 hoch minus 1 bis 2 hoch minus 23 ist wie viel?
Also das ist gleich dann 1 plus 1 minus 2 hoch 23 mal 2 hoch minus
126.
Und das ist dann gleich 2 minus 2 hoch minus 23 mal 2 hoch minus 126.
Okay, was ist jetzt die nächste Zahl, die danach kommt?
Ja, die nächste Zahl, die danach kommt.
Also wir haben nach wie vor eine Null.
Wir haben die Charakteristik 1.
Und wir haben eine Mantissi mit 23 Bits.
Und was ist die nächste Zahl, die danach kommt?
Die wir bekommen ist eigentlich, oder wir bekommen die nächste Zahl,
indem wir eine 1 zu Bit Null addieren.
Das heißt, wenn ich hier zu einer Mantissi 1, 0, 0, 0 addiere,
mit den gleichen Exponenten, 0, 0, 0, 0, 0, 0, dann bekomme ich
natürlich hier 0, 0, 0, 0, 0, 0, 0, 0, 0 und hier 1, 0.
Mantissi 1, 0, 0, 0, 0, 0, 0 und das ist ja nicht normalisiert.
Damit wir das normalisieren, müssen wir also schreiben, der
Richtigkeitshalber würde ich mal diese Sachen hier eliminieren.
Wir betrachten nur die Mantissi.
Das ist also dann irgendetwas mal 2 hoch minus 126.
Das ist unsere Mantissi.
Und normalisieren tun wir, indem nur eine 1 hier steht.
Das heißt, wir müssen mal 2 hoch minus 126.
Also ist gleich 1, 0 mal 2 hoch minus 125.
Was bedeutet das?
Das bedeutet, wir sind jetzt in dem Bereich des nächsten Exponenten
gekommen.
Also der nächstmögliche Exponent oder die nächstmögliche
Charakteristik.
Und das sieht man hier auf der Folie.
Das heißt, die Charakteristik ist jetzt nicht 1, sondern 2.
Und dann fängt das Spiel nochmal an.
Charakteristik 2, dann die nächste Zahl und so weiter und so fort.
Immer wieder bis der Exponent 0 wird.
Das heißt, Charakteristik 127.
Charakteristik 127 bedeutet, wir haben hier 7 Einsen und eine Null.
Und die Mantissi natürlich zunächst mal aus Nullen, aber normalisiert,
also 1,000.
Das ist nichts anderes als die Darstellung der 1.
Und wir wissen, die 1 ist nichts anderes als 1,0 mal 2 hoch 0.
Also Exponent 0 und Mantissi 1.
So, die nächste Zahl, da kommt eine 1 in Bit 0 dazu.
Also 1 plus 2 hoch minus 23 und so weiter und so fort.
Bis wir zum Exponenten 127 kommen.
Das bedeutet die Charakteristik 254.
Und was bedeutet das?
Das ist die Charakteristik 254.
Und dann fangen wir mal wieder um mit 23 Nullen in der Mantissi.
Das heißt 1 mal 2 hoch 127, dann 1 plus 2 hoch minus 23 mal 2 hoch 27
und so weiter und so fort.
Bis alle Bits der Mantissi 1 sind.
Und jetzt aufgepasst, das ist also die höchste Charakteristik, mit der
wir normalisierte Zahlen darstellen.
Und das ist jetzt der größte Betrag der Mantissi, den man hier haben
kann.
Also das bedeutet, es ist 1 plus 2 hoch minus 1, 2 hoch minus 2 und so
weiter und so fort.
Und wenn man das alles multipliziert, dann kommt man auf 2 hoch 128
minus 2 hoch 104.
Die Zahl, die danach kommt, die wird dann nicht mehr in dieser
normalisierten Form dargestellt.
Und somit ist diese Zahl, die wir hier bekommen haben, nichts anderes
als Max Real.
Also die größte positive Zahl, die man in normalisierter Form
darstellen kann in diesem Format.
So, wir haben aber jetzt die zwei Sonderfälle, also Charakteristik 0
und Charakteristik 255 noch nicht betrachtet.
Und das tun wir jetzt, wenn die Charakteristik 0 ist, dann bedeutet
das, wir können hier durch ein spezielles Bitmuster die 0 darstellen.
Und zwar beides, da wir ja eine Darstellung in Betrag-Vorzeichen-Form
haben, haben wir wie die Darstellung, die wir kennengelernt haben von
negativen Zellen in Betrag-Vorzeichen-Form, haben wir zwei
Darstellungen für die 0.
Also einmal eine plus 0 und einmal eine minus 0.
Das heißt, wenn die Charakteristik 0 ist und die Mantissi komplett 0
ist, das ist die plus 0 und auf der anderen Seite die minus 0.
So, was können wir jetzt hier machen?
Natürlich haben wir hier eine Mantissi von 0 und die 1 ist explizit,
also das ist ja nicht normalisiert.
Es ist nicht 1, irgendetwas, sondern tatsächlich alle Bits der
Mantissi sind explizit dargestellt und deshalb ist die 0 hier in nicht
normalisierter Form dargestellt.
Aber wir wissen, dass wir ja um jedes Bit eigentlich kämpfen und jedes
Bit gerne verwenden würden, um Zellen darzustellen.
Was passiert also, wenn wir das gleiche Spiel machen hier mit der
Mantissi und anfangen ein Bit hier 0 und dann 1 und so weiter und so
fort.
Auch solche Mantissi zu definieren mit Charakteristik 0.
Das können wir machen und bekommen wir die sogenannten
denormalisierten Zahlen.
Also die kleinste dann denormalisierte Zahl, die wir darstellen
können, hat die Charakteristik 0, also Exponent minus 127 und hat eine
1 an der Stelle, das heißt 2 hoch minus 23 mal 2 hoch minus 26 und das
ist die kleinste denormalisierte Zahl, die man in diesem Format
darstellen kann.
Dann kommt die nächste denormalisierte Zahl, die hat an der Stelle bei
Bit 1 hier eine 1 und nicht bei Bit 0, also 2 hoch minus 128 und so
weiter und so fort, bis alle Bits der Mantissi 1 sind.
Aber wohlgemerkt, es sind nicht normalisiert, also es ist nicht 1
Komma Rest der Mantissi, sondern 0 Komma komplette Mantissi, das heißt
es ist nichts anderes als das hier, also 1 minus 2 hoch minus 23 mal 2
hoch minus 126 und das ist die größte positive denormalisierte Zahl.
Also das ist die größte denormalisierte Zahl, die man darstellen kann.
So, wenn wir alles hier mal zusammenfassen, es geht ja noch weiter,
das war der Sonderfall für Charakteristik gleich 0, jetzt betrachten
wir den Fall Charakteristik 255.
Charakteristik 255, das heißt der Exponent 128, da können wir Plus
-Unendlich und Minus-Unendlich darstellen.
Und zwar, wenn wir die Charakteristik 255 haben und die Mantissi alle
Bits der Mantissi 0, dann sind das die Darstellungen von Plus
-Unendlich und Minus-Unendlich.
Wenn die Charakteristik 255 ist und die Mantissi ungleich 0, das heißt
1 dieser roten Bits hier 1 ist, dann hat man eine sogenannte Not-A
-Number.
Also z.B.
Overflow,
z.B.
wie ich bereits erwähnt habe, Division durch 0 bzw.
Wurzel aus Minus 1, diese Situation
hier einleiten kann.
Zusammengefasst, wenn wir jetzt alles, was wir heute kennengelernt
haben, auf diesem Zahlenstrahl, womit ich angefangen habe, hier
aufzeichnen, dann haben wir, und betrachten wir das nur für die
positiven Zahlen, dann haben wir irgendwo die Plus-Null.
Die können wir darstellen mit der kleinsten Charakteristik.
Und diese in nicht normalisierter Form.
Und wir wissen, dass wir 2 hoch minus 126 ist die kleinste positive
normalisierte Zahl, also Min-Real.
Und wir wissen, dass wir auch hier Max-Real haben.
Zwischen 0 und Min-Real hier können wir alle den normalisierten Zahlen
darstellen.
Und zwar angefangen mit der kleinsten den normalisierten Zahl, die wir
gerade berechnet haben, bis zur großen den normalisierten Zahl.
Und zwischen Min-Real und Max-Real stellen wir alle normalisierten
Zahlen.
Also ihr müsst euch vorstellen jetzt, zwischen Min-Real und Max-Real,
auf diesem Abschnitt vom Zahlenstrahl, stellen wir alle Zahlen mit 254
unterschiedlichen Exponenten.
Damit man sieht hier, dass die Dichte der Zahlen, die man auf dem
Zahlenstrahl hier hat, auch nicht gleich ist wie bei den
Festkommazahlen.
Zwischen den beiden hier, also der kleinsten den normalisierten Zahl
und der großen den normalisierten Zahl, haben wir alle positiven den
normalisierten Zahlen.
Also Charakteristik gleich 0 und Mantissi ungleich 0.
Und am Ende haben wir natürlich plus unendlich.
Das ist die Charakteristik 255 und Mantissi 0.
Und wenn die Mantissi bei dieser Charakteristik ungleich 0 ist, dann
haben wir alle sogenannten Natter Numbers.
Wenn wir das alles zusammenfassen und uns fragen, wie viele Zahlen wir
überhaupt darstellen können, dann sehen wir, dass wir bei den
normalisierten Gleitkommazahlen 254 verschiedene Exponenten haben.
Also von 1 bis 254.
Wir haben 2 hoch 23 unterschiedliche Mantissen.
Und wir haben ein Vorzeichen Bit, also für positiv und negativ.
Also insgesamt das Vorzeichen, das heißt positive und negative Zahlen,
254 unterschiedliche Exponenten und 2 hoch 23 unterschiedliche
Mantissen.
Also insgesamt 127 mal 2 hoch 25 normalisierte Zahlen.
Wie viele denormalisierte Zahlen können wir darstellen?
Denormalisierte Zahlen haben immer die Charakteristik 0, aber wir
haben positive und negative denormalisierte Zahlen.
Das heißt, wir haben das Vorzeichen, also 2, eine einzige
Charakteristik mal 1 und 2 hoch 23 unterschiedliche Mantissen.
Also insgesamt 2 hoch 24 denormalisierte Zahlen.
Und jetzt haben wir die Charakteristik 255, wir haben sie reserviert
für die Darstellung von Plusunendlich und Natter Numbers.
Und da haben wir das gleiche Spiel.
Das heißt, wir haben 2 Vorzeichen, wir haben eine einzige
Charakteristik und 2 hoch 23 unterschiedliche Mantissen.
Also insgesamt können wir auf dem Rechner in diesem Format 2 hoch 24
Natter Numbers definieren, inklusive Plus- und Minusunendlich.
Also nicht nur Division durch 0 und Wurzel aus Minus 1 und diese
ganzen Geschichten, sondern alles, was man Plusunendlich,
Plusunendlich, Plusunendlich durch Minusunendlich und diese
Geschichten, das heißt hier hat man die Charakteristik 255, mit der
solche Fälle hier abgefangen werden.
Somit will ich das Thema abschließen und ich hoffe, dass ihr das
verstanden habt, beziehungsweise wenn ihr die Folien nochmal anguckt,
dass ihr keine Fragen habt.
Wenn zu diesem Zeitpunkt aber Fragen vorhanden sind, dann bitte meldet
euch, die klären wir, bevor wir zum nächsten Thema übergehen.
Literatur hier zu dem Thema würde ich 2 Artikel empfehlen.
Einmal von Computer Society, also der IEEE Standard for Binary
Floating Point Arithmetic von 1978.
Es sind ungefähr 16 Seiten Papier, was man lesen kann.
Was ich eigentlich sehr mag, ist dieses Artikel oder Papier von
Goldberg, What Every Computer Scientist Should Know About Floating
Point Arithmetic von ECM Computing Survey.
Okay, die beiden Papier sind auch auf der IEEE Homepage verfügbar, das
heißt ihr könnt sie mal downloaden und diejenigen, die Interesse
haben, können das nachlesen.
Wir werden natürlich entsprechend auf den Übungsblättern oder bei der
Übung nochmal Aufgaben zum Thema hier bearbeiten.
Gibt es Fragen?
Wollt ihr eine Pause haben?
Wer ist ja?
Ja, eigentlich war das immer eine Tradition, dass wir eine Pause
machen und das passt jetzt, weil wir gehen jetzt zu einem anderen
Thema über, passt auch zeitlich, thematisch und moralisch und alles.
Deshalb machen wir jetzt drei Minuten Pause.
Okay,
wir machen weiter und zwar wir gehen zum nächsten Thema der heutigen
Vorlesung.
Und zwar, wir wollen ja nicht nur Zahlen im Rechner darstellen,
sondern wir wollen auch Zeichen darstellen mit Darstellung von Zahlen,
mit Darstellung von Vorzeichen, also Darstellung von negativen Zahlen,
Darstellung von Festkomma und Gleitkommazahlen.
Kann jemand die Tour zumachen?
Vielen Dank.
Mit der Darstellung von Komma, also Fließkomma und Gleitkommazahlen
haben wir uns beschäftigt und jetzt wollen wir mal gucken, welche
weiteren Möglichkeiten gibt es bzw.
wie kann man Zeichen im Rechner darstellen.
Und man hat immer das Problem natürlich bei der Umwandlung von
Dezimalzahlen in Dualzahlen, dass man natürlich diese entsprechenden
Algorithmen einsetzen muss, die wir kennengelernt haben.
Wir wollen jetzt hier weitere Codierungen oder Codierungsmöglichkeiten
für Zahlen zunächst mal kennenlernen und zunächst mal eine, bei der
eine Dezimalzahl ziffernweise in eine Binärdarstellung überführt.
Was bedeutet das?
Das bedeutet, wir haben hier zehn Dezimalziffern, also von 0 bis 9 und
wir wollen sie codieren durch eine binäre Bit-Kombination.
Dazu benötigen wir vier Bits und eine solche Gruppe von vier Bits, die
nennt man Tetradi.
Das heißt, somit entsteht eine sogenannte Tetraden-Codierung der
Zahlen.
Mit vier Bits wissen wir, dass wir aber 2 hoch 4, also insgesamt 16
unterschiedliche Codierungen haben und wobei jetzt sechs dieser 16
möglichen Codierungen keine gültige Dezimalziffer darstellen.
Sie heißen also in dem Fall Pseudotetraden.
Wenn man zur Codierung von den zehn Dezimalziffern die Dual
-Äquivalente nimmt, dann erhält man die Zahlen in der sogenannten BCD
-Codierung, die wir auch in rechnerischer Organisation kennengelernt
haben.
Das heißt, als Beispiel, wenn die Zahl 8127 Dezimalzahl angegeben ist,
dann kann man diese Zahl in BCD-Zahl ganz einfach umwandeln, indem man
die Ziffern oder diese Zahl ziffernweise oder die Ziffer durch ihre
äquivalenten Tetraden ersetzt.
Also die 8, da wissen wir, die 8 ist nichts anderes als 10000.
Die 1 mit 4 Bits ist 0001, die 2 ist 0010 und die 7 ist 0111.
Als Dualzahl müssen wir natürlich das umwandeln.
Euclidischer Algorithmus oder Horner Schema kommt man auf etwas
anderes.
Das heißt, man hat auf jeden Fall hier eine einfachere Möglichkeit,
Zahlen in binärer Darstellung umzuwandeln.
Was bedeutet das?
Das bedeutet eigentlich, wir müssen alle, wenn wir jetzt Dezimalzahlen
auf diese Art und Weise codieren im Rechner, dann müssen wir alle
Schaltungen, die addieren, multiplizieren, subtrahieren, dividieren,
auch so konzipieren, dass sie PCD-Zahlen addieren und nicht
Dualzahlen.
Also nicht Stellenwertsysteme wie das Dualsystem oder Oktal oder C
-Dezimal, was in der Informatik verwendet wird, aber hauptsächlich
Dual natürlich.
Das heißt, der Nachteil, den man hier hat aber, ist, dass die
arithmetischen Operationen mit PCD-Zahlen nicht so einfach
realisierbar sind wie mit Dualzahlen.
Das kommt natürlich dazu, dass man hier keine optimale
Speicherplatzausnutzung hat, weil für jede Ziffer der Zahl man vier
Bits braucht.
Auf die Probleme bei arithmetischen Operationen will ich kurz nur hier
eingehen.
Und zwar stellen wir uns mal vor, wir wollen die Zahl 7, 7 plus 5.
Und das wissen wir alle, das wissen die Schulkinder, dass es ja eine
12 ist.
Und jetzt gehen wir hin und machen wir diese Darstellung oder machen
wir die Addition im PCD-Code.
Die 7, wir wissen die 7 ist 0, 1, 1, 1 und die 5 ist 0, 1, 0, 1.
Und dann addieren wir mal hier einfach, 1 plus 1 ist 0, Übertrag 1.
1 plus 1 ist 0, Übertrag 1.
1 plus 1 plus 1 ist 1, Übertrag 1.
Und 1 plus 0 plus 0 ist 1.
So, und wir wissen jetzt sofort, dass diese Tetradi, die wir bekommen
haben, das ist ja klar, das ist ja eine 12, wenn man das als Dualzahl
interpretiert.
Aber als PCD-Zahl ist es keine gültige Tetradi.
Das ist also eine Pseudo-Tetradi.
Weil, mithilfe von dem PCD-Code können wir die Zahlen...
Oh, kann man das so machen?
Eine Sekunde bitte.
So, mithilfe vom PCD-Code können
wir die Zahlen 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10 ist ein
bisschen zu viel, 6, 7, 8, 9, durch die Tetradi 0, 0.
So, aber der Rest hier, was wir mit 4-Bits-Pseudo...
Der Rest, also die 10, 11, 12, 13, 14, 15, also 1, 0, 1, 0,
das sind also keine gültigen PCD-Code.
Und bei unserem Beispiel jetzt, was wir vorher gesehen haben, hatten
wir als Ergebnis 12 und 12 ist eine Pseudo-Tetradi.
Das heißt, an der Stelle muss man natürlich entsprechend die Maßnahmen
ergreifen, um ein korrektes Ergebnis der Addition zu erreichen.
Weil das korrekte Ergebnis hier in dem Beispiel wäre natürlich 12
Dezimal, im PCD-Code wäre 1, 0, 0, 1, 0.
So, das wäre ja das korrekte Ergebnis, was hier herauskommen soll, wo
jede Ziffer durch eine Tetradi dargestellt wird.
Die Frage ist, wie kommen wir von oben, also von 1, 1, 0, was wir
durch unser Blindes addieren, auf dieses korrekte Ergebnis im PCD
-Code.
Darauf gehen wir jetzt heute nicht ein, sondern wir werden darauf
eingehen, wenn wir tatsächlich diese Schaltungen implementieren oder
realisieren, die im PCD-Code addieren, dann werden wir auf die
Probleme eingehen und wie man die hier löst.
So, eine zweite Codierung, auf die ich kurz hier eingehen will, ist
die sogenannte Gray-Codierung.
Das heißt, hier aufeinanderfolgende Zellen werden so durch
Binärzeichen dargestellt, dass sich stets nur ein einziges
Binärzeichen ändert.
Wenn wir zurück hier zu unserem Beispiel sehen und wenn wir die Duali
-Codierung mal betrachten, dann sehen wir zum Beispiel von der
Darstellung von 3 auf die Darstellung von 4, ändern sich alle Bits,
das Nulltibit, das Erstibit und das Zweitibit.
Und das kann natürlich Nachteile haben, Beispiel gebe ich gleich, aber
bei diesem Gray-Code ändert sich von der Darstellung eines Zeichen
oder einer Zahl zur nächsten Zahl nur ein Bit in der Codierung.
Das sind aber Codierungen dieser Art, die heißen einschrittige
Codierungen.
Das heißt, sie haben jetzt keine Stellenwertigkeit, die einzelnen Bits
haben keine Stellenwertigkeit, was ja natürlich die Ausführung von
arithmetischen Operationen mithilfe von diesen Codierungen schwierig
macht.
Ein Beispiel sieht man hier, das heißt, wie die Gray-Codierung für die
Dezimalzahlen von 0 bis 15 aussieht.
Wir wissen zum Beispiel, die Darstellung von 15 im Dual-System ist
1111.
Jetzt ist dargestellt durch 1000.
Und diese Codierung wird erreicht, also mit 4 Bits hier, indem man
tatsächlich von der einen Codierung zur anderen Codierung zur nächsten
Zahl sich nur ein Bit ändert.
Das heißt, wenn die 1 mit 1 anfängt, dann darf die 2 nicht wie die
Dualzahl 2 aussehen.
Also wenn wir jetzt hier für die 2 eine naive Weise, für die 2 0 0 1 0
nehmen, dann würde das bedeuten, dass das erste Bit sich geändert hat
und das zweite Bit sich geändert hat.
Also das geht nicht.
Das heißt, was ist die nächste Codierung, bei der sich nur ein Bit
ändert?
Das bekommt man, indem zum Beispiel dieses Bit 1 wird.
Dann die 3, das Bit hier kann jetzt von 1 auf 0 wechseln, dann haben
wir 0010.
Die 4, wir behalten die Bits und ändern wir das Bit hier.
Jetzt fangen wir an mit dem dritten Bit, wie man hier sieht und so
weiter und so fort.
Und dann sieht man hier, dass von jedem Code, von einer Dezimalziffer
oder von einer Zahl zur nächsten sich nur ein Bit hier ändert.
Das Ganze hat natürlich Vorteile und zwar nicht nur in der Theorie,
wie wir hier sehen, nicht weil es so lustig ist und weil man sich
vieles überlegen kann.
Natürlich kann man tolle Codes auch mal sich überlegen.
Das Ganze hat einen konkreten Vorteil bei vielen Anwendungen.
Und zwar, wenn man zum Beispiel an Absolut-Encoder oder Absolut
-Weggeber denkt.
Das heißt, überall dort, wo man einen Gelenkwinkel messen kann, wo ein
Abstand gemessen werden kann.
Zum Beispiel in der Robotik, das ist ein super Beispiel, wo man diesen
Position -Absolut-Weggeber oder Positionssensor nutzt, damit der
Roboter direkt, wenn man den einschaltet, weiß, wo seine Gelenke sind.
Das sind solche Codescheiben oder Code-Lineale und da gibt es einen
Sensor, der liest ab, weiß, ich stehe an der Stelle.
Ein Unterschied dazu gibt es die inkrementellen Weggeber, die
praktisch Schritte zählen, mit denen nicht automatisch oder nicht
einfach möglich ist, die Position eines Gelenks, beispielsweise eines
Roboters, abzulesen beim Einschalten.
Da muss natürlich das Ding sich so ein bisschen strecken bis zu einer
vordefinierten Position, damit man weiß, das ist die Null und ab dem
Zeitpunkt fange ich an, meine Ticks oder die Schritte zu zählen und
weiß, wo mein Unterarm steht, zum Beispiel wenn es ein Gelenk vor dem
Ellenbogen ist.
Aber bei absoluten Positionssensoren, da hat man solche Codescheiben
mit einem Sensor, der sofort liest, wo das Ding steht.
Jetzt hier an meinem Ellenbogen, nehmen wir mal das Beispiel hier.
Und was hat das mit dem Gray-Code zu tun?
Das hat ein bisschen mit dem Gray-Code zu tun, weil wenn wir uns eine
Scheibe vorstellen und wir kodieren die Winkel, also der Arm bewegt
sich von 0 bis 100.
Das heißt Kodierung durch und
dann nehmen wir mal an, wir machen es nur mit 3 Bits jetzt, der
Einfachheit halber, 0, 1, 2.
Und hier haben wir unterschiedliche Felder, die wir mit einem Sensor
dann natürlich abtasten oder ablesen sozusagen.
So, und wir nehmen an, das ist die Null, also wenn es weiß ist, dann
heißt es alle Bits sind Null.
Das bedeutet, hier haben wir eine 1 für die 1, dann haben wir hier für
die Darstellung der 2 eine 1, die 3 hat 1 hier und 1 hier, wie wir
wissen.
Also wir stellen jetzt die Dezimalzahlen, dann kommt hier die 4, die
5, die 6, die 7,
ok, das reicht.
So, und jetzt stellen wir uns mal vor, der Sensor geht ja über diese
Kodscheibe und muss die ablesen, von einem Schritt zu einem anderen
Schritt.
Und was mit aller Wahrscheinlichkeit passiert ist natürlich, wenn der
Sensor hier optimal ist, angeordnet, dann würde hier an der Stelle zum
Beispiel eine 011 ablesen.
Und an dieser Stelle hier, also eine 3 und an dieser Stelle würde
unser Sensor eine 4 ablesen.
Und jetzt können wir natürlich, der erste Punkt, das erste Problem,
das hier auftreten kann, man sieht hier bei diesem Code an der Stelle
3 und 4, dass alle Bits der Kodierung ändern von 3 auf 4.
Und diese Bits werden sich nie gleichzeitig ändern.
Es gibt viele Fehlerquellen, Stoßsignale, Signallaufzeiten und so
weiter und so fort, sodass diese Bits eventuell nie gleichzeitig
ändern, sodass man von einer 3 auf 4 kommt.
Das heißt, man würde vielleicht beim nächsten Abtasten ein falsches
Wert bekommen.
Ein anderes Problem, was man bekommen würde, ist wenn beispielsweise
dieses Abtasten oder Ablesen durch Ungenauigkeiten,
Platzierungsungenauigkeiten so erfolgt.
Das heißt, dann würde man hier...
Und zwar, das könnte ja eigentlich so passieren, dass wir so ablesen.
Und was bedeutet das?
Was lesen wir hier?
Wir lesen eine Null, Null, Null.
Also es ist klar, welche Probleme da auftreten, wenn man bei diesem
ganz einfachen Absolut-Weggeber, also Absolut-Position-Sensor die
Kodierung auf der Scheibe in Dual macht.
Wie sieht es aus, wenn man die Kodierung in Grey-Code macht?
Wie sieht das aus?
Das sieht so aus, wir brauchen 8 Felder nur,
auch 3 Bits.
Und dann haben wir hier unser Grey-Code.
Und unser Grey-Code ist zunächst mal Null, dann ändert sich ein Bit
hier.
Das heißt, bei der nächsten Zahl darf sich das Bit hier nicht ändern,
sondern der hier.
Bei der nächsten Zahl bleibt der hier erhalten und der darf sich
wieder ändern.
Bei der nächsten bleibt der hier erhalten und der nächste ändert sich.
Jetzt haben wir hier die zwei, die bleiben erhalten und dann der
ändert sich auf 1.
Die zwei bleiben erhalten.
Der auch und der ändert sich und das ist hier die Darstellung so.
Und jetzt sieht man, dass man auf der einen Seite bei diesem Ablesen
immer sich nur ein Bit ändert.
Das heißt, Fehler durch Störquellen, unterschiedliche Signallaufzeiten
usw.
die auftreten, die werden ja eigentlich nicht da sein, weil wir werden
hier beispielsweise 0, 1, 1 und an der nächsten Stelle werden wir hier
0, 1, 0.
Das heißt, das einzige Bit, was sich ändert zwischen diesen zwei
Stufen ist nur dieses Bit hier an der letzten Stelle.
Und da kann jetzt kein unterschiedlicher Wert auftreten oder falscher
Wert auftreten.
Wenn wir beispielsweise auch mal durch falsche Positionierung
folgendes ablesen, dann sehen wir dadurch, dass wir auch hier den Wert
0, 1, 0 bekommen.
Das heißt, keine falschen Werte wie bei der Dual-Codierung vorher.
So, das ist für die Robotiker unter euch, also vorher die Leute, wo
ist der eigentlich, der die Werbung gemacht hat?
Natürlich, das kennst du, oder?
Okay, alles klar.
Die sollen alle das lernen.
Sorge dafür.
Okay, so, die Frage ist, wie können wir jetzt, es ist nicht so
naheliegend, dass wir diesen Code mal hinschreiben, weil die Ziffern
oder die Stellen, die haben ja keine Stellenwertigkeit.
Und die Frage ist, wie können wir eigentlich so einen Gray-Code von
einer Zahl mit drei Bits oder mit vier Bits mal hier erstellen.
Und das wollen wir als nächstes machen.
Und zwar, wir wollen Zahlen in Dual, wie heißt das, Dual in Gray-Code
umwandeln.
Zu überlegen, da ist hier eine Art Algorithmus angegeben.
Und da geben wir mal jetzt hier ein Beispiel.
Nehmen wir mal an, dass x1,
was wollen wir nehmen?
Dann im ersten Schritt multiplizieren wir diese Zahl mit zwei.
Also wir schieben um eine Stelle nach links.
Dann bekommen wir x2.
x2 ist gleich x1 mal 2.
Was bedeutet das?
Das bedeutet, wir haben hier eine 1, 1, 1, 1, 0.
Und im dritten Schritt machen wir eine Modulo 2 Addition von den
beiden Zahlen, von x1 und x2.
Also x3.
x3 ist dann 1, 1, 1, 1 und 0, 1, 1, 1, 1.
Ja, das ist x3.
Ne, das ist nicht x3.
x3 kommt unten.
Also das hier war x1 und das ist x2.
Und jetzt machen wir diese Modulo Operation bzw.
diese Antivalence oder XOR Verknüpfung.
Und da kommt hier, das heißt immer wenn die Zahlen ungleich sind,
haben wir eine 1 hier.
1, hier sind sie gleich, also 0, 0, 0 und hier 1.
Das ist unsere x3.
Und x4 ist gleich, x3 dividiert durch 2.
Dividiert durch 2, was bedeutet das?
Das bedeutet, dass wir die Zahl um eine Stelle, um ein Bit nach rechts
verschieben.
Wenn wir das Ganze um ein Bit nach rechts verschieben, wir nehmen
immer an, dass wir mit einer bestimmten Wortlänge oder Kodlänge
arbeiten.
Also 4 in dem Fall.
Also hier 4 Bit.
Wir verschieben hier also um eine Stelle nach rechts.
Dann kommt als x4 0, 0 und das ist nichts anderes als der Gray-Code
vor 15.
Okay.
Zusammenfassung.
Zwei Codes haben wir heute kennengelernt.
Einmal PCD-Code und einmal Gray-Code.
Die Codierung von den 10 Dezimalziffern beim Gray-Code erfolgt durch
ihre 4-Bit Dual-Äquivalenten, die Tetraden.
6 der 6 möglichen Tetraden, die sich aus der Bit-Kombination mit einer
Wortbreite von 4 Bit ergeben.
Die stellen keine gültigen Dezimalziffer dar, also sie heißen
Pseudotetraden.
Und Nachteil war die suboptimale Speicherplatzausnutzung und Probleme
bei der Ausführung von arithmetischen Operationen.
Gray-Code ist eine einschrittliche Codierung.
Das heißt keine feste Stellenwertigkeit.
Die Ausführung von arithmetischen Operationen ist genauso schwierig.
So, als letzter Punkt zur Zeichenkodierung im Rechner.
Und zwar wissen wir, dass wir im Rechner die Buchstaben, vielleicht
die Buchstaben nicht nur in Deutsch, sondern in allen Sprachen der
Welt auch darstellen wollen.
Auch die Buchstaben in den unterschiedlichen Formatierungen und
Formen, keine Ahnung, kursiv, nicht kursiv, FET.
Und hierzu gab es natürlich anfänglich bekannte Codierungen mit 7-Bit,
heutzutage mit dem Unicode bei 16-Bit.
Und wir wissen, dass ein Standard oder eine Codierung zur Darstellung
von Text ist die ASCII-Codierung.
Es handelt sich hierbei um eine 7-Bit-Codierung, die alle wissen.
Also ich bringe das kurz hier der Vollständigkeit halber, damit keiner
sagt, wir wissen nicht, wie ein ASCII-Code aussieht.
Das heißt 7-Bit-Codierung, da sehen wir hier die Tabelle eingegeben
und anhand von dieser Tabelle kann man den Code ablesen, also den 7
-Bit -Code für ein Zeichen, indem man von der ersten Zeile hier, also
in der ersten Zeile stehen die drei höchstwertigen Bits des Codes und
in der ersten Spalte die vier niedrigwertigen Bits der Codierung.
Das heißt, wenn wir das Zeichen T nehmen, zum Beispiel T, groß
geschrieben, der ASCII-Code von T entspricht 101.
Ich lese das hier und dann das hier, 0100.
Und das gilt natürlich für alle Zeichen oder Zahlen bzw.
Steuerzeichen, die man hier sieht.
Also die höherwertigen Bits, die werden aus der Kopfzeile und die
niedrigwertigen Bits in der ersten Spalte.
Mit sieben Bits können wir 128 Zeichen codieren, also alle Buchstaben
in klein und groß, alle Ziffern, natürlich Kommunikations- und
Steuerzeichen und auch Interpunktionszeichen.
Allerdings reicht es nicht aus, um nationale Besonderheiten von
Sprachen darzustellen.
Also wenn wir jetzt beispielsweise an die deutschen Umlaute denken
bzw.
Spanischen Satzzeichen oder alle möglichen Besonderheiten, dann reicht
das nicht aus.
Hier hat man zwei Möglichkeiten.
Auf der einen Seite die Einführung von nationalen Varianten der ASCII
-7 -Bit-Codierung, zum Beispiel die ISO-7-Bit oder DIN 66003.
Oder eine zweite Möglichkeit, die Erweiterung dieser Codierung auf 8
-Bit, weil man sich natürlich auf die Byte-Orientierung im Rechner
festhalten wollte.
Wir wissen ja, dass die Rechner byte-orientiert sind.
Das heißt, wir nutzen hier die zusätzlichen 128 Zeichen, die sich
durch das 8-Bit ergeben, um die nationalen Besonderheiten bzw.
weitere Sonderzeichen darzustellen.
Die weitere Möglichkeit, die für uns wichtig ist und was wir das
nächste Mal kennenlernen werden, ist dieses 8-Bit, dieses zusätzliche
Bit beim Übergang von 7 auf 8-Bit zu nutzen, um Fehlererkennung zu
machen.
Das heißt, wenn wir ein Datum übertragen zwischen Hauptspeicher und
Festplatte, dann wollen wir sicherstellen, dass das Datum
beispielsweise richtig ankommt.
Und deshalb müssen wir diese Daten sichern, also mit bestimmten Codes,
um zu erkennen, ob Fehler aufgetreten sind oder nicht.
Und um sie eventuell zu korrigieren.
Wir werden das nächste Mal auch Fehler korrigieren, die uns mit Fehler
korrigierenden Codes beschäftigen.
Die nächste Variante für die Darstellung von Zeichen im Rechner ist
die Darstellung mit dem Unicode.
Das heißt, um diese firmenspezifischen oder nationalen Besonderheiten,
die miteinander nicht kompatibel waren, zu vereinheitlichen.
Um beispielsweise Sprachen wie Chinesisch, Japanisch oder Russisch
zu verstehen, war die Darstellung dieser Zeichen nur möglich mit Hilfe
von Codes variabler Länge.
Also kein Code mit einer festen Länge.
Hier eine weltweit genormte Codierung der Zeichen erfolgte durch den
Unicode.
Kurz will ich auf die Entwurfsprinzipien des Unicodes eingehen.
Das sind 10 Entwurfsprinzipien.
Unicode Zeichen Codierungen haben alle eine Länge von 16 Bit.
Das heißt, wir haben 65.536 Zeichen, die wir dort darstellen können.
Was man eigentlich mit diesem Code wollte, dass man alle Sprachen, die
momentan geschrieben oder gesprochen werden oder die jemals
geschrieben oder gesprochen wurden, codiert oder darstellt.
Also nicht nur die europäischen Sprachen, sondern auch Chinesisch,
Japanisch, Arabisch, Hebräisch.
Und hier mit diesem Codeumfang, also wir haben einen Raum von 65.000
Zeichen, mit dem man das alles darstellen kann.
Der gesamte Codeumfang, also mit den 16 Bit, also diese über 65.000
Codierungen, die stehen nur für Zeichen Codierung zur Verfügung.
Das heißt, die stehen nicht für Zeichendarstellung oder
Erscheinungsbild von einem Zeichen.
Wie zum Beispiel dieses A, dieses kursive A, dieses fette A.
Das heißt, alle diese A's haben die gleiche Unicode Codierung, was
hier eingegeben ist mit U0041.
So, die Zeichen haben eine definierte Semantik.
Das heißt, es erlaubt zum Beispiel Wortgrenzen und so weiter zu
finden.
Dann, der Unicode codiert einfach nicht formatiert den Text.
Das heißt, es wird jetzt nicht die Schriftgröße oder die Farbe vom
Text hier codiert.
Und die Zeichen, die werden in einer logischen Reihenfolge gespeichert
für die lateinischen Sprachen oder Sprachen mit lateinischen
Buchstaben, ist diese Reihenfolge von links nach rechts.
Im Arabischen und Hebräischen ist es von rechts nach links.
Und dann werden gleiche Zeichen gleichgesetzt.
Das ist vor allem wichtig in chinesisch-japanisch-koreanischen
Sprachen, also CJK für chinesisch-japanisch-koreanische Sprachen, wo
natürlich das gleiche Zeichen in unterschiedlichen Sprachen vorhanden
ist.
Da hat man dann nicht für das jeweilige Zeichen in der jeweiligen
Sprache einen anderen Code, sondern der gleiche Code wird in
unterschiedlichen Sprachen verwendet.
Dann, der Unicode erlaubt die dynamische Erstellung von
zusammengesetzten Zeichen.
Das heißt, mein Lieblingsbuchstabe, das deutsche U-Umlaut, hat
entweder eine Codierung für die zusammengesetzten Teile hier, also
einmal für die 55 und 308 und einmal natürlich eine Codierung für das
U -Umlaut komplett, also mit 00DC.
Das heißt, solche zusammengesetzten Codierungen sind vorhanden, zum
Beispiel auch für FI oder andere nationale Besonderheiten.
Für zusammengesetzte Zeichen mit eigener Codierung stellt der Unicode
eine Übertragung in äquivalente Sequenz aus Grundzeichen und
modifizierenden Zeichen.
Das ist wie bei den Umlauten hier.
Und weiterhin gibt es eine 1 zu 1 Umsetzung zwischen Unicode und
anderen weltweit verbreiteten Normen, wie zum Beispiel die ISO
-Standard für Lateinsprachen usw.
Weitere Informationen hat man immer auf der Webseite unicode.org.
In der letzten Version von September dieses Jahr oder die letzte
Version von September, die enthält über 100.000 Zeichen, da wurde als
neues Zeichen das türkische Währungssymbol, also das Symbol für die
türkische Lira hinzugefügt.
Das ist ein Standard, auf dem natürlich viele weiteren Initiativen wie
HTML oder XML basieren bzw.
diesem Standard folgen.
Okay, somit sind wir durch diesen Teil der Vorlesung fertig.
Wir fangen das nächste Mal an mit etwas, was richtig spannend ist.
Und zwar, wir wollen uns nicht mit der Darstellung von Zeichen und
Zahlen im Rechner beschäftigen, weil die Abmachung, wenn wir Pause
machen, dann hören wir nicht früher auf.
Wenn wir keine Pause machen, dann hören wir ein paar Minuten früher
auf.
Das heißt, wir wissen, wie man Zahlen, Zeichen, Komma und Vorzeichen
im Rechner darstellt.
Jetzt wollen wir eigentlich sehen, wie können wir Code, also
Codierungen dazu nutzen, um zum Beispiel Fehlerkorrektur zu machen.
Und hier werden wir einen Code kennenlernen, das heißt, wir werden das
nächste Mal den sogenannten Hemming-Code kennenlernen, mit dem wir
Fehler beim Übertragen von Daten von einem Sender zu einem Empfänger
identifizieren können.
Wir werden auch Möglichkeiten sehen, wie wir 1-Bit-Fehler erkennen und
korrigieren können und wie wir 2-Bit-Fehler auch erkennen können.
Das heißt, wir werden auf den Aufbau von diesem Code eingehen und wir
werden auch Erkennung bzw.
Korrigiermöglichkeiten mithilfe von dem Code oder diese Sachen mal
besprechen.
Okay, ich glaube, ich kann euch nicht mehr unter Kontrolle halten, das
ist schlecht.
Deshalb beenden wir die Vorlesung für heute.
Ich bedanke mich für die Aufmerksamkeit und wir sehen uns am Mittwoch.