4. Kapitel - TU Bergakademie Freiberg

Transcription

4. Kapitel - TU Bergakademie Freiberg
Kapitel 4:
Repräsentation von Daten –
Binärcodierung von rationalen Zahlen
und Zeichen
Einführung in die Informatik
Wintersemester 2007/08
Prof. Bernhard Jung
Übersicht
„
Codierung von rationalen Zahlen
‰
‰
‰
„
Konvertierung gebrochener Zahlen zwischen Zahlensystemen
Festkommazahlen
Gleitkommazahlen
Codierung von Text
Literatur
„ Küchlin & Weber. Einführung in die Informatik. 2005.
Kapitel 2, 31-44
„ Herold, Bruno Lurz, Wohlrab: Grundlagen der Informatik. 2006.
Kapitel 3
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
1
Konvertieren echt gebrochener Zahlen in das
Dezimalsystem
„
Eine echt gebrochene Zahl
n (n < 1):
lässt sich mit Hilfe des Hornerschemas wie folgt darstellen:
Beispiele
(0.193)
=
1 ⎛
1
1
⎞
⋅ ⎜1 + ⋅ (9 + ⋅ 3) ⎟
10 ⎝ 10
10 ⎠
(0.101)
=
1 ⎛ 1
1 ⎞
⋅ ⎜1 + ⋅ (0 + ⋅1) ⎟ = 0.625
2 ⎝ 2
2 ⎠
10
2
Mit Hilfe dieser Darstellung können wieder Konvertierungen von anderen
Systemen in das Dezimalsystem einfach durchgeführt werden …
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
Konvertieren echt gebrochener Zahlen vom
Dezimalsystem in andere Systeme
„
Für die Umwandlung des Nachkommateils einer Dezimalzahl in ein
anderes Positionssystem existiert folgender Algorithmus, wobei B die
Basis des Zielsystems ist:
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
2
Konvertieren echt gebrochener Zahlen vom
Dezimalsystem in andere Systeme
„
Beispiele:
Die Überläufe z von oben
nach unten nach 0.
nebeneinander
geschrieben liefern dann die
gesuchte Zahl.
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
Genauigkeitsverluste bei der Umwandlung
gebrochener Dezimalzahlen
„
Manche gebrochenen Zahlen, die sich ganz genau im Dezimalsystem
darstellen lassen, lassen sich leider nicht ganz genau als Dualzahl darstellen.
‰
„
Typische Beispiele dafür sind Zahlen,
die sich im Dualsystem nur durch eine
periodische Ziffernfolge repräsentieren
lassen, wie z. B.
(0.1)10 = (0.0001 1001 1001 1…)2:
Solche Ungenauigkeiten treten dann
natürlich auch in den Rechnern auf,
die ja mit dem Dualsystem arbeiten
‰
Im Beispiel wiederholt sich das Bitmuster
0011und es gilt: (0.1)10 = (0.0 0011 0011 0011…)2
z.B. in Python
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
3
Konvertieren unecht gebrochener Zahlen
„
Um eine unecht gebrochene Zahl zu konvertieren, muss diese in ihren
ganzzahligen Teil und ihren echt gebrochenen Teil aufgeteilt werden,
die dann getrennt von einander zu konvertieren sind.
Beispiel: (12.25)10 = (1100.01)2
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
Rationale Zahlen
Festkommazahlen
„
Bei Festkommazahlen steht das Komma (der Punkt) immer an einer
bestimmten festgelegten Stelle, wobei der Punkt natürlich nicht
eigens mitgespeichert wird:
„
zahl hat die Länge n + m, wobei n Stellen vor und m Stellen nach
dem Punkt gesetzt sind.
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
4
Rationale Zahlen
Festkommazahlen
„
„
Durch Einführen eines eigenen Vorzeichenbits können dann noch
positive und negative Zahlen unterschieden werden
Die Nachteile der Festkommadarstellung sind:
‰
‰
„
Man kann mit einer bestimmten Anzahl von Bits nur einen beschränkten
Wertebereich abdecken
Die Stelle des Punkts (Kommas) muss allgemein festgelegt werden. Und
wo soll man diesen festlegen, wenn manchmal mit sehr kleinen,
hochgenauen Werten und ein anderes Mal mit sehr großen Werten
gearbeitet werden muss?
Aufgrund dieser Nachteile wird die Festkommadarstellung nur in
Rechnern verwendet, die für Spezialanwendungen benötigt werden.
In den üblichen heute verbreiteten Rechnern wird stattdessen die
Gleitkommadarstellung verwendet…
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
Rationale Zahlen
IEEE-Format für float und double
1234.56 = 123.456 * 101 = 12.3456 * 102 = 1.23456 * 103
„
Jede rationale Zahl kann in der Form 2.3756·103 angegeben werden. Bei
dieser Darstellungsform setzt sich die Zahl aus zwei Bestandteilen
zusammen:
‰
„
„
Mantisse (2.3756) und Exponent (3), der ganzzahlig ist
Diese Form wird auch meist in Rechnern verwendet, außer dass dort nicht
mit Basis 10, sondern mit Basis 2 gearbeitet wird
Die für die Darstellung einer Gleitpunktzahl verwendete Anzahl von Bytes
legt fest, ob man mit einfacher (Datentyp float) oder mit doppelter
Genauigkeit (Datentyp double) arbeitet
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
5
Rationale Zahlen
IEEE-Format für float und double
„
Zur Darstellung verwenden die C/C++- und Java-Datentypen
float und double das standardisierte IEEE-Format, wobei
‰
‰
vier Bytes für float und
acht Bytes für double definiert sind.
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
Rationale Zahlen
IEEE-Format für float und double
„
„
Das IEEE-Format geht von normalisierten Gleitkommazahlen aus.
„Normalisierung“ bedeutet, dass der Exponent so verändert wird,
dass der gedachte Dezimalpunkt immer rechts von der ersten NichtNull-Ziffer liegt (im Binärsystem ist dies immer eine 1).
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
6
Rationale Zahlen
IEEE-Format für float und double
„
In der Mantisse steht durch die normalisierte Form das höchstwertige
„Einser-Bit“ immer links vom gedachten Dezimalpunkt (außer für 0.0).
Beim IEEE-Format wird dieses Bit nicht gespeichert
„
Der Exponent ist eine Ganzzahl, welche (nach Addition eines bias)
ohne Vorzeichen dargestellt wird. Durch diese bias-Addition wird für
den Exponent keine Vorzeichenrechnung benötigt.
Der Wert von bias hängt vom Genauigkeitsgrad ab:
- float (mit 4 Bytes, 8 Bits für Exponent):
bias=127
- double (mit 8 Bytes, 11 Bits für Exponent): bias=1023
„
Das Vorzeichenbit zeigt das Vorzeichen der Mantisse, die immer als
Betragswert, auch im negativen Fall nicht als Komplement,
dargestellt wird
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
Rationale Zahlen
IEEE-Format für float und double
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
7
Rationale Zahlen
IEEE-Format für float und double
„
Nach IEEE gilt für
float (einfach) und
double (doppelt):
Einige Sonderfälle des
IEEE-Formats:
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
Codes zur Darstellung von Zeichen
ASCII-Code
„
Der ASCII-Code (American Standard for Coded Information
Interchange) ist eine festgelegte Abbildungsvorschrift (Norm) zur
binären Kodierung von Zeichen.
‰
Der ASCII-Code umfasst Klein-/Großbuchstaben des lateinischen
Alphabets, (arabische) Ziffern und viele Sonderzeichen
„
‰
„
‰
‰
aber z.B. keine deutschen Umlaute
7-Bit-Zeichenkodierung
damit 27 = 128 Zeichen darstellbar
Früher: 8. Bit zur Fehlerkorrektur (Paritätsbit)
Heute: Erweiterungen von ASCII auf 8 Bit,
„
Prof. B. Jung
z.B. ISO 8859 (Latin-1, Latin-2, …)
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
8
ASCII-Code
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
Codes zur Darstellung von Zeichen
ASCII-Code
„
Zur Speicherung von Texten werden einzelne Bytes, die jeweils
immer ein Zeichen kodieren, einfach hintereinander abgespeichert,
so dass man eine Zeichenkette (String) erhält
„
Um das Ende der Zeichenkette zu identifizieren, werden (in den
Programmiersprachen) unterschiedliche Verfahren verwendet:
‰
‰
Die Länge der Zeichenkette wird im ersten bzw. in den ersten Bytes vor
der eigentlichen Zeichenkette gespeichert. Dieses Verfahren benutzt z. B.
die Programmiersprache PASCAL.
Das Ende der Zeichenkette wird durch ein besonderes, nicht
darzustellendes Zeichen gekennzeichnet. So verwendet z.B. die
Programmiersprache C/C++ ein 0-Byte (Byte, in dem alle Bits 0 sind),
um das Ende einer Zeichenkette zu kennzeichnen.
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
9
Codes zur Darstellung von Zeichen
ASCII-Code
„
Python
Unterscheidung zwischen Ziffern und Zeichen
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
Codes zur Darstellung von Zeichen
ASCII-Code
„
Beispiele zum Speichern von Zeichen im ASCII-Code:
Python
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
10
Codes zur Darstellung von Zeichen
Unicode
„
Mit dem Unicode wurde ein Code eingeführt, in dem die Zeichen
oder Elemente praktisch aller bekannten Schriftkulturen und
Zeichensysteme festgehalten werden können
„
Die Zeichenwerte der von Unicode erfassten Zeichen wurden bis vor
kurzem noch ausschließlich durch eine zwei Byte lange Zahl
ausgedrückt. Auf diese Weise lassen sich bis zu 65 536 verschiedene
Zeichen in dem System unterbringen
(2 Byte = 16 Bit = 216 Kombinationsmöglichkeiten)
„
In der Version 3.1 wurden 94 140 Zeichen aufgenommen, wobei die
Zwei-Byte-Grenze durchbrochen wurde. Das Zwei-Byte-Schema, im
Unicode-System als Basic Multilingual Plane (BMP) bezeichnet, wird
deshalb von einem Vier-Byte-Schema abgelöst
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
Weitere Codes
BCD-Code
„
BCD-Werte (Binary Coded Decimals) sind eine weitere Art der
binären Kodierung von Zahlen bzw. Ziffern.
Decimal: 0
1
2
3
4
5
6
7
8
9
BCD:
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
„
„
Es ist eigentlich eine Speicherplatz verschwendende Art der
Speicherung von Dezimalzahlen, erleichtert aber manche
Anwendungen
Anwendungsbereiche:
‰
‰
‰
Rechnen im Dezimalsystem (exakte Darstellung gebrochener Zahlen!)
Speichern von Dezimalzahlen (Telefonnummern u.ä.)
Ansteuerung von LCD-Anzeigen, um Dezimalziffern einzeln anzuzeigen
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
11
Weitere Codes
BCD-Code
‰
‰
Beispiele:
Die Bitmuster 1010, 1011, …, 1111 werden im BCD-Code nicht für
Ziffern benötigt. Sie können genutzt werden z.B. für
Vorzeichen +: 1010 und -: 1011
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
Datentypen in Java (Auswahl)
Typ
Beschreibung
Anzahl
Bits
Wertebereich
int
signed two's
complement integer
32
-231 ... 231-1
-2 147 483 648 … 2 147 483 647
long
signed two's
complement integer
64
-263 ... 263-1
-9 223 372 036 854 775 808 …
9 223 372 036 854 775 807
short
signed two's
complement integer
16
-215 ... 215-1
float
IEEE 754 floating
point
32
Beträge: 1.2E-38 … 3.4E+38
double
IEEE 754 floating
point
64
Beträge: 2.3E-308 … 1.7E+308
char
Unicode character
16
Prof. B. Jung
-32 768 … 32 767
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
12
Datentypen in Python (Auswahl)
Typ
Beschreibung
Anzahl Bits
Wertebereich
int
signed two's
complement integer
(mindestens)
32
-231 ... 231-1
-2 147 483 648 … 2 147 483 647
long
signed two's
complement integer
unbeschränkt
beliebig
float
IEEE 754 floating
point (double)
64
Beträge: 2.3E-308 … 1.7E+308
sowie u.a. ascii und unicode strings
Prof. B. Jung
Grundlagen der Informatik, WS 2007/08
TU Bergakademie Freiberg
13