Rechnersysteme Vorlesung 2 - am Institut für Mathematik und ...
Rechnersysteme Vorlesung 2 - am Institut für Mathematik und ...
Rechnersysteme Vorlesung 2 - am Institut für Mathematik und ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>Rechnersysteme</strong><br />
<strong>Vorlesung</strong> 2:<br />
Informationsspeicherung<br />
Meike Klettke<br />
Universität Greifswald<br />
Themen der <strong>Vorlesung</strong><br />
� Einführung, Zahlensysteme<br />
� Dezimal-, Binär-, Oktal-, Hexadezimalsystem<br />
� Umrechnung zwischen verschiedenen<br />
Zahlensystemen<br />
� Rechenoparationen mit Binärzahlen<br />
� Darstellen von Festkommazahlen<br />
� Darstellen von Gleitkommazahlen<br />
� Kodierung von Buchstaben <strong>und</strong> Zeichen<br />
� Literatur<br />
1<br />
2<br />
1
Zahlensysteme<br />
� Zahlensystem<br />
� wird zur Darstellung von Zahlen verwendet<br />
� Eine Zahl wird nach den Regeln des Zahlensystems als<br />
Folge von Ziffern dargestellt<br />
� Unterschieden werden<br />
� Additionssysteme <strong>und</strong><br />
� Stellenwertsysteme<br />
Additionssysteme<br />
� Zahl wird als Summe der Werte ihrer Ziffern dargestellt<br />
� Beispiel: römische Zahlen mit den Ziffern<br />
� I = 1<br />
� V = 5<br />
� X = 10<br />
� L = 50<br />
� C = 100<br />
� D = 500<br />
� M = 1000<br />
3<br />
4<br />
2
Zahlensysteme<br />
Römische Zahlen<br />
Ägyptische Zahlen<br />
� Das auf den ägyptischen Ziffern beruhende Zahlensystem<br />
stellt<br />
� positive ganze Zahlen<br />
� in einem Additionssystem zur Basis 10 dar,<br />
� jede Zehnerpotenz hat eigenes Symbol<br />
� Die Ziffern werden addiert.<br />
� Für die Null kein eigenes Symbol erforderlich.<br />
� Der betende Mann (Symbol siehe nächste Folie) steht<br />
sowohl <strong>für</strong> eine Million als auch <strong>für</strong> unendlich<br />
5<br />
6<br />
3
Ägyptische Zahlen /2<br />
Wert: 1 10 100 1000 10000 100000 1000000<br />
Hieroglyphe:<br />
einfacher Wasserlilie betender<br />
Strich Mann<br />
Rinds- Finger<br />
gespann<br />
Seilschlinge Kaulquappe<br />
oder Frosch<br />
Stellenwertsysteme<br />
� Die Stelle (Position) einer Ziffer impliziert deren Wert<br />
� Die 'niederwertigste' Position steht dabei im Allgemeinen rechts<br />
� Ein Stellenwertsystem hat<br />
� eine Basis B <strong>und</strong><br />
� Ziffern, die von 0 bis B-1 laufen.<br />
� Die Ziffernposition hat einen Wert, der einer Potenz der Basis N<br />
entspricht. Für die N-te Position hat man einen Wert von B N-1<br />
7<br />
8<br />
4
Dezimalsystem<br />
� Stellenwertsystem, Basis 10<br />
� Ziffern 0, 1, 2, 3, 4, 5, 6, 7, 8 <strong>und</strong> 9.<br />
� jeder Ziffernposition entspricht eine Zehnerpotenz<br />
� Beispiel 6857 bedeutet, dass<br />
� die 7 mit 10 0 = 1,<br />
� die 5 mit 10 1 = 10,<br />
� die 8 mit 10 2 = 100 <strong>und</strong><br />
� die 6 mit 10 3 = 1000<br />
� multipliziert wird, also<br />
� 6000 + 800 + 50 + 7<br />
� st<strong>am</strong>mt ursprünglich aus Indien<br />
� vom persischen <strong>Mathematik</strong>er Muh<strong>am</strong>mad ibn Musa al-Chwarizmi in<br />
seinem Arithmetikbuch ( 8. Jahrh<strong>und</strong>ert) verwendet<br />
� im 10. Jahrh<strong>und</strong>ert in Europa eingeführt, d<strong>am</strong>als noch ohne Null<br />
Technische Umsetzung des<br />
Dezimalsystems<br />
„Dasselbe, was du auf rechnerischem Wege gemacht hast, habe ich kürzlich mechanisch<br />
versucht <strong>und</strong> eine aus elf vollständigen <strong>und</strong> sechs verstümmelten Rädchen bestehende<br />
Maschine gebaut, welche gegebene Zahlen im Augenblick zus<strong>am</strong>menrechnet: addiert,<br />
subtrahiert, multipliziert <strong>und</strong> dividiert. Du würdest hell auflachen, wenn Du da wärest <strong>und</strong><br />
sehen könntest, wie sie, so oft es über einen Zehner oder H<strong>und</strong>erter weggeht, die Stellen<br />
zur Linken ganz von selbst erhöht oder ihnen beim Subtrahieren etwas wegnimmt.“<br />
(Brief von Schickard an Kepler <strong>am</strong> 20. September 1623)<br />
Gef<strong>und</strong>en im Buch von Becker, Drechsler, Molitor<br />
10<br />
9<br />
5
Binärsystem (Dualsystem)<br />
� von Gottfried Wilhelm Leibniz im 17. Jahrh<strong>und</strong>ert entwickelt<br />
� Stellenwertsystem mit der Basis 2 <strong>und</strong> den Ziffern 0 <strong>und</strong> 1<br />
� vor allem in der Informationstechnik verwendet,<br />
� 2 0 = 1<br />
� 2 1 = 2<br />
� 2 2 = 4<br />
� 2 3 = 8<br />
� 2 4 = 16<br />
� 2 5 = 32<br />
� …<br />
� 2 10 = 1024<br />
� usw.<br />
� Beispiel: 1011b = 11<br />
� 1 * 2 3 + 0 * 2 2 + 1 * 2 1 + 1 * 2 0 = 1 * 8 + 0 * 4 + 1 * 2 + 1 * 1 = 11<br />
Leibniz-Traktat zu Dualzahlen<br />
von 1679<br />
11<br />
12<br />
6
Weitere<br />
Stellenwertsysteme /1<br />
� binäre Zahlen unübersichtlich lang, schwer <strong>für</strong><br />
Menschen verwendbar,<br />
� Deshalb zur Darstellung oft Hexadezimalzahlen<br />
verwendet,<br />
� Basis 16<br />
� Ziffern 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E <strong>und</strong> F<br />
� Hexadezimale Zahlen <strong>und</strong> binäre Zahlen lassen sich<br />
leicht ineinander umwandeln,<br />
� 4 Stellen einer binären Zahl entsprechen einer Stelle einer<br />
hexadezimalen Zahl<br />
� Beispiel: 1001b = 9h<br />
Weitere<br />
Stellenwertsysteme /2<br />
Was ich noch gef<strong>und</strong>en habe:<br />
� Vigesimalsystem mit der Basis 20<br />
� Oktalsystem mit der Basis 8<br />
� Duodezimalsystem mit der Basis 12<br />
� Rechnung mit Dutzend <strong>und</strong> Gros<br />
� 1 Shilling = 12 Pence<br />
� St<strong>und</strong>enzählung hat in diesem System ihren Ursprung<br />
� Die Babylonier benutzten ein Zahlensystem mit einer Basis von<br />
60 (Sexagesimalsystem).<br />
13<br />
14<br />
7
Weitere<br />
Stellenwertsysteme /3<br />
� Basis 20: bei einigen Naturvölkern gef<strong>und</strong>en<br />
� zum Zählen wurden neben den Fingern auch noch die Füße<br />
verwendet<br />
� Das analog zu erwartende Zahlensystem zur Basis fünf bei<br />
Völkern, die nur eine Hand zum Zählen benutzen, wurde aber<br />
bisher nirgendwo entdeckt<br />
� In Neuseeland war hingegen das System zur Basis 11 üblich<br />
<strong>und</strong> einige Völker benutzen das System zur Basis 18<br />
(die Angaben zu weiteren Stellenwertsystemen st<strong>am</strong>men<br />
von www.wikipedia.de: also ohne Gewähr)<br />
Unärsystem<br />
� Das Unärsystem wird gern auf Bierdeckeln<br />
eingesetzt<br />
� Für die Darstellung der Zahl n werden n Striche<br />
verwendet.<br />
� Für die Darstellung großer Zahlen jedoch ungeeignet<br />
15<br />
16<br />
8
Zahlendarstellung in<br />
verschiedenen Zahlensystemen<br />
Dual-, Oktal- <strong>und</strong><br />
Hexadezimalsystem<br />
In der Informatik spielen das Dual-, Oktal- <strong>und</strong> Hexadezimalsystem eine<br />
zentrale Rolle.<br />
� Das Zehnersystem, (10 verschiedene Ziffern 0, 1, 2,…, 9) ist<br />
technisch schwer zu realisieren.<br />
� deshalb benutzt man in Rechnern intern das Dualsystem, bei dem<br />
nur zwei Ziffern, 0 <strong>und</strong> 1, verwendet werden, die sich technisch relativ<br />
leicht nachbilden lassen:<br />
� schwer zu merken <strong>und</strong> <strong>für</strong> Menschen unhandlich, deshalb<br />
Hexadezimalsystem <strong>und</strong> Oktalsystem<br />
17<br />
18<br />
9
Dual-, Oktal- <strong>und</strong><br />
Hexadezimalsystem<br />
� Eine einzelne Binärstelle (0 oder 1) wird als Bit bezeichnet<br />
� Abkürzung <strong>für</strong> „BInary digiT“, also Binärziffer.<br />
� kleinste Informationseinheit, die ein Computer verarbeiten kann<br />
� Dualsystem handelt es sich um ein Positionssystem. Der Wert einer<br />
Position ist hier jedoch eine Potenz von 2:<br />
� Beispiele:<br />
Dual-, Oktal- <strong>und</strong><br />
Hexadezimalsystem<br />
� Konvertieren zwischen Dual- <strong>und</strong> Oktalsystem<br />
� Neben dem Dualsystem sind in der Informatik noch das<br />
Oktalsystem <strong>und</strong> Hexadezimalsystem wichtig<br />
� Weil 2 3 = 8 (Basis des Oktalsystems) <strong>und</strong><br />
� Weil 2 4 = 16 (Basis des Hexadezimalsystems)<br />
� Umwandlung Dezimalzahl in Oktalzahl:<br />
� von rechts beginnend so genannte Dualtriaden (Dreiergruppen) bilden<br />
19<br />
20<br />
10
Dual-, Oktal- <strong>und</strong><br />
Hexadezimalsystem<br />
� Konvertieren zwischen Dual- <strong>und</strong> Oktalsystem<br />
� Bei der Umwandlung einer Oktalzahl in ihre<br />
Dualdarstellung geht man den umgekehrten Weg.<br />
� Es ist offensichtlich, dass ein Mensch sich die Zahl<br />
3614 (8) wesentlich leichter merken <strong>und</strong> d<strong>am</strong>it umgehen<br />
kann, als 011110001100 (2) .<br />
Dual-, Oktal- <strong>und</strong><br />
Hexadezimalsystem<br />
� Konvertieren zwischen Dual- <strong>und</strong> Hexadezimalsystem<br />
� Hexadezimalsystem, ähnlich leicht ins Dualsystem konvertierbar<br />
2 4 = 16<br />
� Umwandlung einer Zahl aus Dualsystem ins Hexadezimalsystem:<br />
� von rechts beginnend so genannte Dualtetraden (Vierergruppen)<br />
bilden.<br />
21<br />
22<br />
11
Bits <strong>und</strong> Bytes<br />
� Ein Byte ist eine Bezeichnung in der Informatik <strong>für</strong><br />
8Bit<br />
� eine adressierbare Speichereinheit, die groß genug<br />
ist, um ein beliebiges Zeichen aus dem Basis-<br />
Zeichensatz aufzunehmen.<br />
� einen Datentyp in einigen Progr<strong>am</strong>miersprachen <strong>für</strong><br />
eine 8 Bit breite Einheit (1 Byte = 8 Bit)<br />
� Achtung: In einigen Progr<strong>am</strong>miersprachen kann die<br />
Größe eines Bytes auch davon abweichend definiert<br />
werden.<br />
Konvertierungsalgorithmen<br />
Konvertieren von anderen Systemen in das Dezimalsystem<br />
Eine in einem Positionssystem mit der Basis B dargestellte<br />
natürliche Zahl n:<br />
lässt sich mit Hilfe des Hornerschemas wie folgt darstellen:<br />
Mit Hilfe dieser Darstellung können Konvertierungen in das<br />
Dezimalsystem einfach durchgeführt werden.<br />
23<br />
24<br />
12
Konvertieren aus dem<br />
Dezimalsystem<br />
Algorithmus <strong>für</strong> die Umwandlung einer Dezimalzahl x in ein<br />
Zahlensystem mit der Basis n:<br />
Konvertieren aus dem<br />
Dezimalsystem<br />
Zwei Beispiele dazu:<br />
25<br />
26<br />
13
Positionssysteme bei<br />
gebrochenen Zahlen<br />
Bei gebrochenen Zahlen trennt ein Punkt (Komma im Deutschen)<br />
� den ganzzahligen Teil der Zahl<br />
� vom gebrochenen Teil (Nachkommateil).<br />
Summenformel dazu:<br />
Positionssysteme bei<br />
gebrochenen Zahlen<br />
� Beispiele:<br />
27<br />
28<br />
14
Konvertieren echt gebrochener<br />
Zahlen in das Dezimalsystem<br />
Eine echt gebrochene Zahl<br />
n (n < 1):<br />
lässt sich mit Hilfe des Hornerschemas wie folgt darstellen:<br />
Beispiel:<br />
Konvertieren echt gebrochener Zahlen<br />
vom Dezimalsystem in andere Systeme<br />
� Algorithmus <strong>für</strong> die Umwandlung des Nachkommateils einer<br />
Dezimalzahl in ein anderes Positionssystem<br />
� B ist die Basis des Zielsystems<br />
29<br />
30<br />
15
Konvertieren echt gebrochener Zahlen<br />
vom Dezimalsystem in andere Systeme<br />
Zwei Beispiele:<br />
Die Überläufe z von oben nach unten nach 0,<br />
nebeneinander geschrieben liefern die gesuchte Zahl im<br />
Zahlensystem zur Basis B (im Beispiel2).<br />
Genauigkeitsverluste<br />
Manche gebrochenen Zahlen<br />
� lassen sich im Dezimalsystem genau darstellen<br />
� als Dualzahl jedoch nicht<br />
Z.B. Zahlen, die sich im Dualsystem nur<br />
durch eine periodische Ziffernfolge<br />
repräsentieren lassen, wie z. B.<br />
0.1(10) = 0.0001 1001 1001 1…(2):<br />
! Solche Ungenauigkeiten treten auch<br />
in den Rechnern auf, die ja mit dem<br />
Dualsystem arbeiten !<br />
Im Beispiel wiederholt sich das Bitmuster<br />
0011<strong>und</strong> es gilt:<br />
31<br />
32<br />
16
Konvertieren unecht<br />
gebrochener Zahlen<br />
Um eine unecht gebrochene Zahl zu konvertieren, muss diese<br />
� in ihren ganzzahligen Teil <strong>und</strong><br />
� ihren echt gebrochenen Teil aufgeteilt werden,<br />
die dann getrennt von einander zu konvertieren sind,<br />
Beispiel:<br />
� (12.25) 10 =(12) 10 + (0.25) 10<br />
� (1100) 2 + (0.01) 2 = (1100.01) 2<br />
Zwischenstand:<br />
� Zahlensysteme<br />
� Additionssysteme<br />
� Stellenwertsysteme<br />
� Verschiedene Stellenwertsysteme, zur Basis 2, 8, 10, 16<br />
� Umwandlung von ganzen Zahlen in andere Stellenwertsysteme<br />
� Umwandlung von gebrochenen Zahlen in andere<br />
Stellenwertsysteme<br />
� Was jetzt folgt:<br />
� Rechenoperationen im Binärzahlensystem<br />
33<br />
34<br />
17
Addition von Dualzahlen<br />
Für die duale Addition gilt allgemein:<br />
Beispiel:<br />
Subtraktion von Binärzahlen<br />
� Subtraktion von Binärzahlen (a – b) ist möglich, rechnerintern aber<br />
schwer realisierbar<br />
� Zweite Operation neben Addition notwendig<br />
� Gängige Praxis ist deshalb Verwendung negativer Zahlen <strong>und</strong><br />
Realisierung der Subtraktion als Addition (a + -b)<br />
� Negative Zahlen werden üblicherweise durch ihren Betrag mit<br />
vorangestelltem Minuszeichen dargestellt.<br />
� Gesondertes Vorzeichen rechnerintern nicht möglich<br />
� Deshalb Komplementbildung zur Erzeugung negativer Zahlen<br />
� zwei Arten der Komplementbildung, wobei B <strong>für</strong> das Zahlensystem<br />
steht:<br />
� B-Komplement (also Zweier-Komplement bei Binärzahlen) <strong>und</strong><br />
� (B-1)-Komplement (also Einer-Komplement bei Binärzahlen)<br />
� B-Komplement technisch leichter realisierbar ist, wird deshalb<br />
vorwiegend verwendet<br />
35<br />
36<br />
18
Bildung des<br />
Einerkomplementes<br />
� Vorzeichen einer Binärzahl wird gewechselt, indem alle Stellen<br />
invertiert werden.<br />
� Beispiel:<br />
� +10h = 0000 1010b (erste Stelle: Vorzeichen)<br />
� -10h = 1111 0101b<br />
� Weiteres Beispiel:<br />
� +65h = 0100 0001b<br />
� -65h = 1011 1110b<br />
� Vorteile: schnell zu bilden (auch in der Umsetzung im Rechner)<br />
� Nachteile: zwei Darstellungen der Null<br />
� +0h = 0000 0000b<br />
� -0h = 1111 1111b<br />
Bildung des<br />
Zweierkomplementes<br />
� alle Stellen werden invertiert <strong>und</strong> es wird eine 1 addiert<br />
� Beispiel:<br />
� +10h = 0000 1010b<br />
� -10h = 1111 0101b + 1b = 1111 0110b<br />
� Weiteres Beispiel:<br />
� +65h = 0100 0001b<br />
� -65h = 1011 1111b<br />
� Vorteile: nur eine Darstellung der Null<br />
� 0h = 0000 0000b<br />
� Wird in den meisten Rechnern eingesetzt <strong>und</strong> im Folgenden<br />
weiter verwendet<br />
37<br />
38<br />
19
Andere Variante:<br />
Exzessdarstellung<br />
� Es gibt auch die Möglichkeit, zu allen Zahlen einen festen Wert<br />
(bias= Verschiebung, Abweichung, systematische<br />
Messabweichung eines Messgeräts) zu addieren, um d<strong>am</strong>it<br />
einen Wertebereich von zum Beispiel -128 bis 127 auf 0 – 256<br />
zu transformieren.<br />
� Das heißt auch Nullpunktverschiebung<br />
� Dabei wird zu allen Zahlen vor der Berechnung 128 addiert,<br />
nach der Berechnung subtrahiert<br />
� Verfahren wird verwendet, um den Exponenten in der<br />
Darstellung reeller Zahlen zu speichern (folgt im Laufe der<br />
<strong>Vorlesung</strong>)<br />
Veranschaulichung des<br />
Zweier-Komplements<br />
Zuordnung der Bitkombinationen zu positiven <strong>und</strong> negativen Zahlen<br />
Zahlenring <strong>für</strong> vier Bits, erstes Bit ist Vorzeichenbit<br />
39<br />
40<br />
20
Rechenoperationen mit dem<br />
Zweier-Komplement<br />
� Regeln <strong>für</strong> die Bildung eines Zweier-Komplements<br />
1. jedes einzelne Bit wird invertiert (umgedreht)<br />
2. Zu der so entstandenen Bitkombination wird eine 1 addiert<br />
� Beispiel „ro<strong>und</strong>-trip“:<br />
Rechenoperationen mit dem<br />
Zweier-Komplement<br />
� Subtraktion a - b wird durch eine Addition a + -b realisiert<br />
� Beispiele:<br />
� ! Das geht nur bei dieser Operation !<br />
41<br />
42<br />
21
Rechenoperationen mit dem<br />
Zweier-Komplement<br />
Im Beispiel hat der vorne stattfindende Überlauf des Bits keinen<br />
Einfluss auf die Richtigkeit des Ergebnisses.<br />
Das gilt nicht allgemein. Wenn das Ergebnis nicht im darstellbaren<br />
Zahlenbereich liegt, dann erhält man bei einem Überlauf ein falsches<br />
Ergebnis:<br />
Rechenoperationen mit dem<br />
Einer-Komplement<br />
(B-1)-Komplement (Einer-Komplement) zum Vergleich.<br />
Die Zahlendarstellung ist hier symmetrisch. Es gibt eine positive <strong>und</strong><br />
eine<br />
negative 0.<br />
43<br />
44<br />
22
Rechenoperationen mit dem<br />
Einer-Komplement<br />
� Regeln <strong>für</strong> die Bildung eines Einer-Komplements<br />
� jedes einzelne Bit wird invertiert (umgedreht)<br />
� Führt die anschließende Addition des Komplements zum Überlauf<br />
einer 1, muss zum Ergebnis diese 1 hinzuaddiert werden (das heißt<br />
„Einer-Rücklauf “)<br />
� Beispiele:<br />
Multiplikation <strong>und</strong> Division im<br />
Binärsystem<br />
� ganzzahlige Multiplikation bzw. Division wird in einem Rechner<br />
allgemein mittels wiederholter Addition durchgeführt<br />
� Sonderfälle:<br />
� Multiplikators bzw. Divisors: 2, 4, 8, …<br />
� Multiplikation bzw. Division kann dann einfacher <strong>und</strong> schneller durch eine<br />
Verschiebung von entsprechend vielen Bits nach links bzw. rechts<br />
erfolgen:<br />
Bei 2 (2 1 ) um 1 Bit, bei 4 (2 2 ) um 2 Bits, bei 8 um 3 (2 3 ) Bits usw.<br />
45<br />
46<br />
23
Konvertieren durch sukzessive<br />
Multiplikation <strong>und</strong> Addition<br />
� Algorithmus zur Konvertierung aus einem beliebigen<br />
Positionssystem in ein anderes Positionssystem<br />
� Berechnung wird im Zielsystem mit der Basis B des<br />
Ausgangssystems durchgeführt<br />
� Basis B des Ausgangssystems im Zielsystem, Beispiel 10 als<br />
Dualzahl: 1010<br />
� Eingabezahl: b n ..b 0<br />
Reelle Zahlen<br />
Festpunktzahlen<br />
� Punkt (bzw. Komma) steht immer an der gleichen festgelegten<br />
Stelle,<br />
� Punkt wird natürlich nicht eigens mitgespeichert<br />
zahl hat die Länge n + m, wobei n Stellen vor <strong>und</strong> m Stellen nach<br />
dem Punkt gesetzt sind.<br />
47<br />
48<br />
24
Reelle Zahlen<br />
Festpunktzahlen<br />
� Bei Vorhandensein eines eigenen Vorzeichenbits können positive<br />
<strong>und</strong> negative Zahlen unterschieden werden.<br />
� Nachteile der Festpunktdarstellung:<br />
1. nur beschränkter Wertebereich mit festgelegter Anzahl von Bits<br />
2. Die Stelle des Punkts (Kommas) muss allgemein festgelegt<br />
werden.<br />
– sehr kleine, hochgenaue Werte <strong>und</strong><br />
– große Werte gearbeitet<br />
dann aber nicht gleichermaßen speicherbar<br />
� Deshalb: Festpunktdarstellung nur in Rechnern <strong>für</strong><br />
Spezialanwendungen verwendet<br />
� Sonst Gleitpunktdarstellung<br />
Reelle Zahlen<br />
IEEE-Format <strong>für</strong> float <strong>und</strong> double<br />
� IEEE =<strong>Institut</strong>e of Electrical and Electronics Engineers,<br />
� „ei trippel i“ gesprochen)<br />
� weltweiter Berufsverband von Ingenieuren aus den Bereichen<br />
Elektrotechnik <strong>und</strong> Informatik.<br />
� gibt auch Standards heraus<br />
� IEEE 754 = Gr<strong>und</strong>datenformate <strong>für</strong> binäre Gleitkommazahlen mit 32<br />
Bit (single precision) bzw. 64 Bit (double precision)<br />
49<br />
50<br />
25
Reelle Zahlen<br />
IEEE-Format <strong>für</strong> float <strong>und</strong> double<br />
Jede reelle Zahl kann in der Form 2.3756·10 3 angegeben werden. Bei<br />
dieser Darstellungsform setzt sich die Zahl aus zwei Bestandteilen<br />
zus<strong>am</strong>men:<br />
� Mantisse (2.3756) <strong>und</strong> Exponent (3), der ganzzahlig ist.<br />
Diese Form wird auch meist in Rechnern verwendet, außer dass dort<br />
nicht mit Basis 10, sondern mit Basis 2 gearbeitet wird.<br />
� Datentyp float - einfacher Datentyp<br />
� Datentyp double - doppelter Genauigkeit<br />
Reelle Zahlen<br />
IEEE-Format <strong>für</strong> float <strong>und</strong> double<br />
Zur Darstellung verwenden die C/C++- <strong>und</strong> Java-Datentypen float<br />
<strong>und</strong> double das standardisierte IEEE-Format, wobei vier Bytes <strong>für</strong><br />
float <strong>und</strong> acht Bytes <strong>für</strong> double definiert sind.<br />
51<br />
52<br />
26
Reelle Zahlen<br />
IEEE-Format <strong>für</strong> float <strong>und</strong> double<br />
� normalisierte Gleitpunktzahlen<br />
� „Normalisierung“ bedeutet, dass der Exponent so verändert wird, dass<br />
der gedachte Dezimalpunkt immer rechts von der ersten Nicht-Null-Ziffer<br />
liegt (im Binärsystem ist dies immer eine 1) – deshalb kann diese<br />
weggelassen werden, siehe vorherige Folie<br />
Reelle Zahlen<br />
IEEE-Format <strong>für</strong> float <strong>und</strong> double<br />
� In der Mantisse: höchstwertige „Einser-Bit“ immer links vom gedachten<br />
Dezimalpunkt (außer <strong>für</strong> 0.0). (Beim IEEE-Format wird dieses Bit nicht<br />
gespeichert.)<br />
� Der Exponent ist eine ganze Zahl, welche (nach Addition eines bias)<br />
ohne Vorzeichen dargestellt wird. Durch diese bias-Addition wird <strong>für</strong> den<br />
Exponent keine Vorzeichenrechnung benötigt.<br />
Der Wert von bias hängt vom Genauigkeitsgrad ab:<br />
- float (mit 4 Bytes, 8 Bits <strong>für</strong> Exponent): bias=127<br />
- double (mit 8 Bytes, 11 Bits <strong>für</strong> Exponent): bias=1023<br />
� d<strong>am</strong>it „Abbildung“ des Bereiches von -127-128 auf 0-256<br />
� Das Vorzeichenbit zeigt das Vorzeichen der Mantisse, die immer als<br />
Betragswert, auch im negativen Fall nicht als Komplement, dargestellt<br />
wird.<br />
53<br />
54<br />
27
Reelle Zahlen<br />
IEEE-Format <strong>für</strong> float <strong>und</strong> double<br />
Reelle Zahlen<br />
IEEE-Format <strong>für</strong> float <strong>und</strong> double<br />
Nach IEEE gilt <strong>für</strong><br />
float (einfach) <strong>und</strong><br />
double (doppelt):<br />
Sonderfälle des<br />
IEEE-Formats:<br />
55<br />
56<br />
28
Codes zur Darstellung von<br />
Zeichen: ASCII-Code<br />
� Nicht nur Zahlen müssen dargestellt <strong>und</strong> gespeichert werden,<br />
� Auch andere Arten von Informationen wie Zeichen (Texte)<br />
� bekannteste Kodierung da<strong>für</strong>:<br />
� ASCII-Code (American Standard for Coded Information Interchange)<br />
� festgelegte Abbildungsvorschrift zur binären Kodierung von Zeichen.<br />
� ASCII-Code umfasst<br />
� Klein-/Großbuchstaben des lateinischen Alphabets,<br />
� (arabische) Ziffern <strong>und</strong><br />
� viele Sonderzeichen.<br />
� Kodierung erfolgt in einem Byte (8 Bits), so dass mit dem ASCII-Code 256<br />
verschiedene Zeichen dargestellt werden können.<br />
� erstes Bit wird nicht vom Standard-ASCII-Code genutzt, d<strong>am</strong>it können im<br />
Standard-ASCII-Code nur 128 Zeichen dargestellt werden.<br />
� Unterschiedliche, speziell normierte, ASCII-Code-Erweiterungen nutzen<br />
57<br />
das erste Bit, um weitere 128 Zeichen darstellen zu können.<br />
ASCII-Code (Ausschnitt)<br />
58<br />
29
ASCII-Code<br />
Speicherung von Texten:<br />
� Kodierung aller Zeichen<br />
� Abspeicherung nacheinander<br />
� dadurch Zeichenkette (String)<br />
Ende der Zeichenkette wird in den Progr<strong>am</strong>miersprachen durch<br />
verschiedene Verfahren gekennzeichnet:<br />
� Die Länge der Zeichenkette wird im ersten bzw. in den ersten Bytes vor<br />
der eigentlichen Zeichenkette gespeichert. (PASCAL)<br />
� Ende der Zeichenkette wird durch ein besonderes, nicht darzustellendes<br />
Zeichen gekennzeichnet. So verwendet z.B. die Progr<strong>am</strong>miersprache<br />
C/C++ ein 0-Byte (Byte, in dem alle Bits 0 sind), um das Ende einer<br />
Zeichenkette zu kennzeichnen.<br />
Zahlendarstellungen im ASCII-<br />
Code<br />
Unterscheidung zwischen Ziffern <strong>und</strong> Zeichen: „0458“ != 0458<br />
59<br />
60<br />
30
ASCII-Code: Beispiele<br />
Beispiele zum Speichern von Zeichen im ASCII-Code:<br />
Uni-Code<br />
� ASCII-Code ist mit seinen 256 Zeichen sehr begrenzt.<br />
� deshalb weitere Kodierungsmöglichkeiten, zum Beispiel: Unicode<br />
� Unicode umfasst Zeichen oder Elemente praktisch aller bekannten<br />
Schriftkulturen <strong>und</strong> Zeichensysteme (Russisch, Arabisch, Chinesisch)<br />
� Unicode umfasste anfangs zwei Byte<br />
� d<strong>am</strong>it ließen sich bis zu 65 536 verschiedene Zeichen in dem<br />
System unterbringen (2 Byte = 16 Bit = 2 16<br />
Kombinationsmöglichkeiten)<br />
� In Version 3.1 wurden 94 140 Zeichen aufgenommen, d<strong>am</strong>it 4 Byte<br />
verwendet.<br />
61<br />
62<br />
31
Weitere Codes<br />
BCD-Code<br />
� BCD-Werte (Binary Coded Decimals) sind eine weitere Art der<br />
binären Kodierung von Zahlen bzw. Ziffern.<br />
� Für jede Dezimalziffer werden mindestens vier, manchmal auch acht<br />
Bits verwendet. Die jeweiligen Ziffern werden nacheinander immer<br />
durch ihren Dualwert angegeben.<br />
� eigentlich Speicherplatz verschwendende Art der Speicherung von<br />
Dezimalzahlen, erleichtert aber manche Anwendungen<br />
� Anwendungsbereiche:<br />
� Rechnen im Dezimalsystem,<br />
� Speichern von Dezimalzahlen (Telefonnummern u.ä.) (schnelle Umwandlung),<br />
� Ansteuerung von LCD-Anzeigen, um Dezimalziffern einzeln anzuzeigen.<br />
� Also alle Anwendungen, in denen häufige Umwandlungen zwischen<br />
Dual- <strong>und</strong> Dezimalsystem erfolgen müssen<br />
Weitere Codes<br />
BCD-Code<br />
- Beispiele:<br />
- Die Bitmuster 1010, 1011, …, 1111 werden im BCD-Code nicht<br />
<strong>für</strong> Ziffern benötigt. Sie können genutzt werden z.B. <strong>für</strong><br />
Vorzeichen +: 1010 <strong>und</strong> -: 1011<br />
63<br />
64<br />
32
Weitere Codes<br />
Gray-Code<br />
Beim Gray-Code zur Kodierung von Binärzahlen unterscheiden sich<br />
zwei aufeinanderfolgende Codewörter immer nur um genau ein Bit.<br />
Weitere Codes<br />
Gray-Code<br />
� Verwendung findet der Code z.B. <strong>für</strong> die binäre Ausgabe von Werten<br />
von A/D-Wandlern (A/D = Analog/Digital) zur Vermeidung unsinniger<br />
Zwischenwerte beim Auslesen.<br />
� Da sich bei jedem Zahlenübergang immer jeweils nur ein Bit ändert,<br />
werden unsinnige Zwischenwerte bei Übergängen von z.B. (7) 0111 zu<br />
(8) 1000 vermieden (z.B. 1111(15)), wenn die Übergänge von 0→1 <strong>und</strong><br />
1→0 unterschiedlich schnell in der HW ablaufen.<br />
� auch Methode, um Effekte durch Übertragungsfehler einzudämmen.<br />
� Im Gray-Code können Werte gespeichert werden.<br />
Sollen Werte in Gray-Zahlen arithmetisch weiterverarbeitet werden,<br />
müssen diese dazu natürlich erst in Dualzahlen umgewandelt werden<br />
65<br />
66<br />
33
Duale Größenangaben<br />
Gr<strong>und</strong>datentypen<br />
� In einem Computer werden Zeichen – wie z. B. Buchstaben – anders<br />
behandelt als ganze Zahlen <strong>und</strong> Gleitpunktzahlen wie z.B. die Zahl π =<br />
3.1415…<br />
� Beispiel von vorhin: „0815“ ≠ 0815<br />
� also Klassifikation der unterschiedlichen Datentypen<br />
� Unterscheidung im Speicherbedarf<br />
� d<strong>am</strong>it der darstellbaren Größe von Zahlen bzw. des Zeichenvorrats <strong>und</strong><br />
� Unterscheidung in der Interpretation des gegebenen Bitmusters.<br />
� Ordnet man in einem Progr<strong>am</strong>m Daten bestimmten Klassen wie<br />
Zeichen, ganze Zahl, einfach/doppelt genaue Gleitpunktzahl usw. zu,<br />
dann teilt man dem Rechner deren Datentyp mit.<br />
(Querverbindung: Algorithmen/Datenstrukturen)<br />
67<br />
68<br />
34
Gr<strong>und</strong>datentypen<br />
Wertebereiche der Gr<strong>und</strong>datentypen<br />
auf 32-Bit-Architekturen<br />
69<br />
70<br />
35
Verlust von Bits bei zu<br />
großen Zahlen<br />
Wird versucht, in einem Datentyp einen Wert abzulegen, der nicht in<br />
diesen Datentyp passt, so werden einfach die vorne überhängenden<br />
Dualziffern abgeschnitten.<br />
Verlust von Bits bei zu<br />
großen Zahlen<br />
Vorsicht:<br />
In Progr<strong>am</strong>miersprachen wie C/C++ <strong>und</strong> auch Java wird beim<br />
Abspeichern von Zahlen, die außerhalb des Wertebereichs eines<br />
Datentyps liegen, meist kein Fehler gemeldet, sondern es werden die<br />
überhängenden Bits abgeschnitten! Mit diesem falschen Wert wird<br />
weiter gearbeitet, was schließlich zu falschen Ergebnissen führt.<br />
71<br />
72<br />
36