Kodierung

Werbung
Informatik II
Kodierung
Kodierung
Rainer Schrader
Zentrum für Angewandte Informatik Köln
24. Oktober 2008
1/1
2/1
Kodierung
Kodierung
Ein Alphabet
Kodierung hat mehrere Bedeutungen:
Σ
ist eine endliche Menge.
Beispiele:
• (das Erstellen von Programmcode)
• die Darstellung von Zeichen und Zahlen im Rechner
• die Transformierung von Zeichenketten einer Sprache in eine andere
3/1
Σ1 =
{0, 1, 2 . . . 9},
Σ2 =
{A, . . . , Z },
Σ3 =
{0, 1}
Σ4 =
{0, . . . , 9, A, . . . , Z , a, . . . , z , +, −, /, ?, !}
4/1
Kodierung
Kodierung
• übliche Alphabete:
Sei Σ ein Alphabet und i ∈ N.
• Σ = {0, 1}
• Σ = {0, . . . , 9, A, . . . , F }
(i) Σi := {a1 a2 . . . ai : aj ∈ Σ, 1 ≤ j ≤ i } ist die Menge der Wörter der
Länge i über Σ.
• wir lassen im Folgenden auch allgemeinere Alphabete zu
(ii) ∅ bezeichnet das leere Wort
(iii) Σ∗ :=
S
0≤i <∞
• wir fassen die zu kodierenden Objekte in drei Gruppen zusammen:
Σi ist die Menge der endlichen Wörter über Σ.
(iv) Sei M eine Menge, f : M → Σ∗ eine bijektive Abbildung. Dann heißt
f Kodierung von M.
(i) Text
(ii) ganze Zahlen mit oder ohne Vorzeichen
(iii) reelle Zahlen
5/1
6/1
Kodierung
Kodierung
Ein Bit (binary digit)
Gliederung
• ist die kleinstmögliche Informationseinheit
• die Informationsmenge der Antwort auf eine Frage, die zwei Antworten
• Bits, Bytes, Dateien
• Darstellung von Texten
zulässt:
• Darstellung ganzer Zahlen
• Darstellung von Dezimalzahlen
• ja oder nein
• Fehlertoleranz
• schwarz oder weiß
.
• ..
• wahr oder falsch
7/1
8/1
Kodierung
Kodierung
• durch Folgen von Bits kann man offensichtlich mehr Antworten kodieren:
• Kodierung der Antwort durch einen Code mit zwei Zeichen
• Beispiele:
• 0 oder 1
• 2 Bits: 00, 01, 10, 11
• in elektronischen Datenverarbeitungsanlagen
• 0 ←→ 0 Volt
4 = 22 mögliche Bitfolgen/Antworten
1 ←→ 5 Volt
• 3 Bits: 000, 001, 010, 011, 100, 101, 110, 111
• auf Festplatten
• 0 ←→ unmagnetisiert
8 = 23 mögliche Bitfolgen/Antworten
1 ←→ magnetisiert
• n Bits:
2n mögliche Bitfolgen/Antworten
9/1
10 / 1
Kodierung
Kodierung
Bezeichnungen von Bitfolgen fester Länge n:
Eine Datei ist eine beliebig lange (aber endliche) Folge von Bytes, die
Informationen repräsentiert wie
n=1
Bit
n=4
Halbbyte
n=8
Byte
n = 16
Halbwort
Diese Begriffe
n = 32
Wort
werden nicht
• Musikstücke
• Bilder
n = 64
Doppelwort
einheitlich verwendet
• Videos . . .
• Texte
• Zahlen
11 / 1
12 / 1
Kodierung
Kodierung
• die Größe einer Datei ist die Anzahl ihrer Bytes
• analog zu Gewichtsmaßen definieren wir
• üblicherweise enthalten Dateinamen eine Erweiterung, die festlegt, wie
die Bytefolge zu interpretieren ist, z.B.
• name.txt, name.doc für unformatierten Text
• name.tex, für formatierten Text
• name.wav, name.mp3 für Musik
• name.tiff, name.jpeg für Bilder
• name.avi, name.mp4 für Videos
1 Kilobyte
= 1024
= 210 Bytes
1 Megabyte
= 10242
= 220 Bytes
1 Gigabyte
= 10243
= 230 Bytes
1 Terabyte
= 10244
= 240 Bytes
1 Petabyte
= 10245
= 250 Bytes
1 Exabyte
= 10246
= 260 Bytes
• in UNIX ist es üblich, den Typ der Datei in den ersten Inhaltsbytes zu
kennzeichnen
• Vorsicht: Hersteller verwenden oft „Giga” für 109 statt 230
• dann enthält eine 500-Gigabyte-Festplatte tatsächlich nur 465 Gigabyte
Speicherplatz [ 500 × 109 ≈ 465 × 230 ]
14 / 1
13 / 1
Kodierung
Kodierung
Alphanumerische Codes
Gliederung
Kodierung der Zeichen der Tastatur über {0, 1}, d.h.:
• Bits, Bytes, Dateien
• Darstellung von Texten
• 52 Groß- und Kleinbuchstaben
• Darstellung ganzer Zahlen
• Darstellung von Dezimalzahlen
• arithmetische Symbole, Sonderzeichen
• 10 Ziffern
• Steuerzeichen (Zeilenvorschub, Tabulator, Backspace,…)
• Fehlertoleranz
• es reichen 7 Binärziffern (= 27 = 128 Möglichkeiten)
15 / 1
16 / 1
Kodierung
Kodierung
7-Bit ASCII Code (American Standard Code for Information Interchange)
gebräuchliche Codes:
Bits 3210/7654
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
• ASCII: American Standard Code for Information Interchange
• z.B.
Zeichen
A
B
Z
CR
ASCII
0100001
0100010
0101110
0001101
Zeichen
a
b
z
?
ASCII
01100001
01100010
01111110
00111111
• benutzt 7 Bits = 7 Binärzeichen
• üblicherweise durch eine führende Null zu 8 Bits ergänzt
P000
NULL
SOM
EOA
EOM
EOT
WRU
RU
BELL
FE
HT/SK
LF
V/TAB
FF
CR
SO
SI
P001
DC0
DC1
DC2
DC3
DC4
ERR
SYNC
LEM
S0
S1
S2
S3
S4
S5
S6
S7
P010
!
”
#
$
%
&
’
(
)
*
+
,
.
/
P011
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
P100
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P101
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
↑
←
P110
‘
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
P111
p
q
r
s
t
u
v
w
x
y
z
ACK
UC
ESC
DEL
17 / 1
18 / 1
Kodierung
Kodierung
(2) für Erweiterungen
• verwende die Bytes 1000 0000 bis 1111 1111 für Sonderzeichen wie
Umlaute, Akzente, griechische Buchstaben, andere Schriften,
graphische Zeichen, …
• die 2 = 128 ASCII-Zeichen entsprechen den Bytes 0000 0000 für
7
ASCII 0 bis 0111 1111 für ASCII 127
• die ISO (International Organization for Standardization) hat
• damit ist das erste Bit immer 0 und kann zusätzlich genutzt werden:
verschiedene ASCII-Erweiterungen normiert
• darunter die ASCII-Erweiterung Latin-1 für europäische Bedürfnisse
• Kodierung und Dekodierung mittels verschiedener ASCII-Erweiterungen
(1) Paritätsbit
• setze es stets so, dass das Byte immer eine ungerade Anzahl von
erzeugt Kuddelmuddel
Einsen enthält
• (Umlaute werden durch merkwürdige Zeichen ersetzt)
• UNIX ignoriert das erste Bit
• damit kann es zur Fehlererkennung benutzt werden
• es gibt ein Programmpaar uuencode/uudecode zur Konvertierung in
7-Bit-ASCII und zurück. (Gewisse Email-Programme machen das
automatisch.)
19 / 1
20 / 1
Kodierung
Kodierung
UTF-8
Unicode (universal character set)
• ein Standard, der versucht, das ASCII-Erweiterungschaos zu
• eine kompakte Kodierung,
• ist kompatibel mit der historischen 7-Bit-ASCII-Kodierung
• fasst die relevanten Zeichen der verschiedenen Kulturkreise im
• trägt den UCS-Erweiterungen Rechnung: Norm ISO-10646 Anhang R
• UTF steht für „UCS Transformation Format“
überwinden
universellen 16-Bit-Code UCS-2 zusammen
• UTF-8 hat variable Kodierungslängen
• UCS-2 ist international standardisiert unter der Norm ISO-10646
• ebenso wurde eine 31-Bit-Version (UCS-4) festgelegt
• 1 Byte für 7-Bit-ASCII-Zeichen
• 2–6 Bytes für andere Zeichen
21 / 1
22 / 1
Kodierung
Kodierung
UTF-8 Schema
• 1-Byte Codes haben die Form
0xxx xxxx für 7-Bit-ASCII.
• 2-Byte Codes haben die Form
110x xxxx, 10xx xxxx für 11-Bit UCS-2.
weitere Codes: (vorwiegend auf Großrechnern)
• 3-Byte Codes haben die Form
• BCD
• EBCDIC
1110 xxxx, 10xx xxxx, 10xx xxxx für 16-Bit UCS-2.
• 4-Byte Codes haben die Form
1111 0xxx, 10xx xxxx, 10xx xxxx, 10xx xxxx für 21-Bit UCS-2.
• ANSI
• 5-Byte Codes haben die Form
1111 10xx, 10xx xxxx, 10xx xxxx, 10xx xxxx, 10xx xxxx für 26-Bit UCS-2.
• 6-Byte Codes haben die Form
1111 110x, 10xx xxxx, 10xx xxxx, 10xx xxxx, 10xx xxxx, 10xx xxxx für 31-Bit
UCS-2
• d.h. für 7-Bit-ASCII erhöht sich die Dateilänge nicht
• erlaubt, bei einem Übertragungsfehler leicht wieder aufzusetzen.
23 / 1
24 / 1
Kodierung
Kodierung
Gliederung
Kodierung von Zeichenketten
• Bits, Bytes, Dateien
• Darstellung von Texten
• Zeichenketten (strings) werden kodiert, indem man die Codes der
Zeichen aneinander fügt
• Darstellung ganzer Zahlen
• z.B. (7-Bit-ASCII mit Paritätsbit) für „INFORMATIK II“:
• natürliche Zahlen (inkl.der Null)
0100 1001 1100 1110 0100 0110 0100 1111 0101 0010 1100 1101
1100 0001 0101 0100 0100 1001 1100 1011 0010 0000 0100 1001
0100 1001
• ganze Zahlen
• Darstellung von Dezimalzahlen
• Fehlertoleranz
25 / 1
26 / 1
Kodierung
Kodierung
• sei b > 1 eine natürliche Zahl (Basis)
• und z0 , z1 , . . . , zb−1 b Zahlzeichen (Ziffern)
Satz [b-adische Darstellung]
Sei b ∈ N mit b ≥ 2.
• die Zahlzeichen entsprechen den natürlichen Zahlen:
(i) Jede natürliche Zahl a > 0 lässt sich eindeutig darstellen in der Form
z0 ≡ 0, z1 ≡ 1, z2 ≡ 2, . . . zb−1 ≡ b − 1.
a=
r
X
ak b k mit ak ∈ {0, . . . , b − 1}, ar 6= 0
k =0
(ii) Jede natürliche Zahl a kann so mit O(logb a) Ziffern kodiert werden.
Darstellung natürlicher Zahlen:
Satz [b-adische Darstellung]
Beweis:
Sei b ∈ N mit b ≥ 2.
(i) Jede natürliche Zahl a > 0 lässt sich eindeutig darstellen in der Form
a=
r
X
ak b k mit ak ∈ {0, . . . , b − 1}, ar 6= 0
˝
a=
k =0
(ii) Jede natürliche Zahl a kann so mit
¨
• (i) Existenz: Setze ak = bak mod b,
• denn rechnet man leicht nach, dass:
r
X
ak b k .
k =0
O(logb a) Ziffern kodiert werden.
27 / 1
28 / 1
Kodierung
Kodierung
(ii) Eindeutigkeit:
• angenommen a habe zwei Darstellungen
• d.h. nach eventuellem Auffüllen mit 0-Koeffizienten gilt:
a=
r
X
ak b k =
k =0
Pr
• somit:
• und:
k =0 (ak
r
X
k =0
Beispiele für Zahlensysteme
Zahlensystem
Dezimalsystem
Dualsystem
Oktalsystem
Hexadezimalsystem
ak0 b k mit ak , ak0 ∈ {0, . . . , b − 1}.
− ak0 )b k = 0 mit − b < ak − ak0 < b
a0 − a00
b
+
r
X
k =1
Basis b
10
2
8
16
Ziffern
0, 1, 2, . . ., 9
0, 1
0, 1, 2, . . ., 7
0, 1, 2, . . ., 9, A, . . ., F
(ak − ak0 )b k −1 = 0
{z
|
Historisch:
}
a∗
• b = 12 („Dutzend“, „Gros“)
• b = 20 („quatre-vingt“)
• b = 60 (Zeitrechnung, Schock)
0
0
• da a∗ ∈ N, folgt a0 −a
∈N
b
0
• da −b < a0 − a0 < b, folgt a0 − a00 = 0
• Anwendung des Arguments auf a∗ ergibt ak = ak0 (k = 0, . . . , r )
29 / 1
30 / 1
Kodierung
Kodierung
Beispiel
angewandt auf a = 5013410 und b = 10 liefert das des obigen Verfahrens:
Beispiele:
100112
1B516
1 · 24
16
1910
=
=
=
=
=
=
1 · 16
256
43710
2
+
+
+
0 · 23
11 · 16
176
+
1
0 · 22
+
Sprechweise:
(ar , . . . , a0 )b ist die Darstellung der Zahl
+
+
5 · 16
5
1 · 21
2
+
+
1 · 20
1
0
a0
=
a1
=
..
.
a
b c mod 10 = 4
1
a
b c = (5013) mod 10 = 3
10
Korollar
Insbesondere lässt sich jede natürliche Zahl n eindeutig in der Form
P
ak b k zur Basis b.
n=
r
X
zi 2i
i =0
mit zi ∈ Σ2 = {0, 1} darstellen.
31 / 1
2
32 / 1
Kodierung
Kodierung
Konvertierungsregeln
Beispiel: binäre Darstellung von 153710
n
b n2 c
n mod 2
1537
768
384
192
96
48
24
12
6
3
1
768
384
192
96
48
24
12
6
3
1
0
1
0
0
0
0
0
0
0
0
1
1
Wie lassen sich natürliche Zahlen vom b-adischen System in das Dezimalsystem
umrechnen und umgekehrt?
P
• dezimal −→ b-adisch:
a→
ak b k
j a k
ak =
mod b
bk
• b-adisch −→ dezimal:
(ar , ar −1 , . . . , a0 )b → a:
a=
r
X
ai b i
i =0
eventuell unter Verwendung des Hornerschemas:
a = a0 + b(a1 + b(a2 + . . . + b(ar −1 + bar )) . . .)
d.h. 153710 = (11000000001)2
34 / 1
33 / 1
Kodierung
Kodierung
Umwandlungen zwischen Zahlensystemen:
• z.B.: 43710 → ?16
437
27
1
:
:
:
16
16
16
=
=
=
27
1
0
Rest 5
Rest 11
Rest 1
Arithmetische Operationen
• ähnlich wie im Dezimalsystem
• z.B. Addition im Binärsystem
• also 43710 = 1B516
• besonders einfach: dual ↔ hexadezimal
1110
E
0110
6
1011
B
dezimal
12
77
89
0101
5
35 / 1
binär
1100
1001101
1011001
36 / 1
Kodierung
Kodierung
• teile auf in Vorzeichen und Betrag
Gliederung
• erstes Bit für das Vorzeichen, restliche Bits wie gehabt:
• Bits, Bytes, Dateien
• Darstellung von Texten
• „0“ für „+“
• „1“ für „−“
• Darstellung ganzer Zahlen
• natürliche Zahlen (inkl. der Null
• z.B.: (8 Bit Wörter)
• ganze Zahlen
5 : 00000101
−5 : 10000101
• darstellbarer Bereich bei Wortlänge n:
• Darstellung von Dezimalzahlen
• Fehlertoleranz
• n = 8 : [−127, +127]
• allgemein: [−2n−1 + 1, 2n−1 − 1]
38 / 1
37 / 1
Kodierung
Kodierung
Nachteile
• es gibt keine eindeutige Null (+0, −0)
• das Rechenwerk braucht ein Addierwerk und ein Subtrahierwerk, sowie
Abhilfe: Rückführung der Subtraktion auf die Addition
• z.B. Addition zweier Zahlen x und y in dieser Darstellung:
Idee:
Komplementdarstellungen
eine Logik, die entscheidet, ob addiert oder subtrahiert werden muss
Vorzeichen
von x
+
−
+
Vorzeichen
von y
+
−
−
−
+
x
x
x
x
≥y
<y
≥y
<y
Operation auf
den Beträgen
Add x + y
Add x + y
Subtr x − y
Subtr y − x
Subtr x − y
Subtr y − x
• für z > 0 Darstellung von −z durch z = C − z für geeignetes C
• dann gilt:
Vorzeichen des
Ergebnisses
+
−
+
−
−
+
x − y = x + (C − y ) − C = x + y − C
• d.h. Subtraktion durch Addition des Komplements
• und anschließender Subtraktion von C (und die muss einfach sein!)
39 / 1
40 / 1
Kodierung
Kodierung
(b − 1)-Komplement
• sei b die Basis, n die Wortlänge
• wähle C = b n − 1
P
i
• Komplementbildung von x = n−1
i =0 xi b :
Beispiele: (4 Stellen)
• Dezimalsystem: 4711 = 5288 Null: 0000, 9999
• Dualsystem 0101 = 1010 (erstes Bit: Vorzeichen) Null: 0000, 1111
x =C −x
= (b n − 1) −
n−1
X
xi b i
Zahlenbereich: [−(b n−1 − 1), (b n−1 − 1)]
i =0
=
n−1
X
b i +1 −
i =0
=
n−1
X
bi −
i =0
n−1
X
xi b i
i =0
n−1
X
((b − 1) − xi )b i
i =0
• d.h. Komplementbildung durch stellenweises Komplementieren
41 / 1
42 / 1
Kodierung
Kodierung
(b − 1)-Komplement: Veranschaulichung am Zahlenring
−7=1000
(b − 1)-Komplement: Subtraktion von C
7=0111
• sei z = x − y = x + y − C
• Fall 1: x > y (⇒ z > 0)
6=0110
−6=1001
5=0101
−5=1010
x +y =
−4=1011
4=0100
−3=1100
x + (b n − 1 − y )
=
x − y −1 + b n
| {z }
3=0011
⇒
−2=1101
x + (C − y )
=
0<z <b n
n
b ≤ x + y < 2b n
2=0010
−1=1110
• d.h. Überlauf von 1 in die nicht existierende (n + 1)-te Stelle
• ignorieren des Überlaufs entspricht Subtraktion von b n
1=0001
−0=1111
0=0000
• ignorieren und Addition von 1 entspricht Subtraktion von C = b n − 1
43 / 1
44 / 1
Kodierung
Kodierung
(b − 1)-Komplement: Beispiele
• Dezimalsystem (n = 2)
65
+ 56
121
→ 1
22
65
− 43
22
(b − 1)-Komplement: Beispiele
• Dualsystem (n = 5)
• Dualsystem (n = 5)
01110
+ 11000
100110
−→ 1
00111
14
− 7
7
01110
+ 11111
101101
−→ 1
01110
14
− 0
14
„Einserrücklauf“
die „negative Null“ stört nicht
(=
b 00111)
46 / 1
45 / 1
Kodierung
Kodierung
b-Komplement
• sei b die Basis, n die Wortlänge und C = b n
P
i
• Komplementbildung von x = n−1
i =0 xi b :
(b − 1)-Komplement: Subtraktion von C
• Fall 2: x ≤ y (⇒ z ≤ 0)
• z ist in Komplementdarstellung erwünscht: C − |z |
• z = −|z | = x + y − C ⇒ x + y = C − |z | ≤ C = b n − 1
x =
=
= 2
00101
+ 11000
11101
xi b i
(b n − 1) −
n−1
X
xi b i + 1
i =0
• Beispiel:
5
+ 2
7
n−1
X
i =0
• richtige Darstellung: kein Überlauf, kein Einserrücklauf
5
− 7
− 2
C − x = bn −
=
n−1
X
b i +1 −
i =0
= 00010
=
n−1
X
i =0
bi −
n−1
X
xi b i + 1
i =0
n−1
X
((b − 1) − xi )b i + 1
i =0
• d.h. Stellenkomplement bilden, Eins aufaddieren (kaum schwieriger)
• nur eine Null
47 / 1
• Zahlenbereich: [−b n−1 , (b n−1 − 1)]
48 / 1
Kodierung
Kodierung
b-Komplement: Veranschaulichung am Zahlenring
−8=1000
7=0111
−7=1001
6=0110
−6=1010
Beispiel: 4 Stellen
5=0101
−5=1011
• Dezimalsystem 4711 = 5289
• Dualsystem 0101 = 1011 (erstes Bit: Vorzeichen)
4=0100
−4=1100
3=0011
−3=1101
−2=1110
2=0010
1=0001
−1=1111
0=0000
49 / 1
50 / 1
Kodierung
b-Komplement: Subtraktion von C
Kodierung
• einfach: C = b n , d.h. Überlauf in (n + 1)-ter Stelle ignorieren (kein
Einserrücklauf)
• Überschreiten des zulässigen Zahlenbereichs
• z.B. b-Komplement, n = 4
• Beispiele:
• Dezimalsystem (n = 2)
65
+ 57
122
↓
22
65
− 43
22
• Dualsystem (n = 5)
14
− 7
7
01110
+ 11001
100111
↓
00111
5
− 7
− 2
00101
+ 11001
11110
6
+ 3
9
0110
+ 0011
1001
=
b −7
− 5
− 4
− 9
1011
+ 1100
10111
=
b7
• Übungsaufgabe: Analysieren Sie alle Fälle, in denen arithmetische
(= 00010)
51 / 1
Überläufe auftreten können, und schlagen Sie vor, wie man solche
entdecken kann
52 / 1
Kodierung
Kodierung
Exkurs: Blaise Pascal (1623–1662)
Pascaline (1645)
• eigentlich konnte die Maschine nur addieren
• Subtraktion wurde mit Hilfe des Neunerkomplements realisiert
53 / 1
54 / 1
Kodierung
Kodierung
• Multiplikation x · y im b-Komplement
• x > 0, y > 0, z.B.: (n = 10)
13 * 21
13
26
273
• Multiplikation x · y im b-Komplement
• x > 0, y < 0, Darstellung des Ergebnisses im b-Komplement
0000001101 * 0000010101
1101
0
1101
0
1101
0100010001
x ∗ y = bn − x ∗ y
= b n − b n ∗ x + x ∗ (b n − y )
= bn − bn ∗ x + x ∗ y
= x ∗ y − b n ∗ (x − 1)
• d.h. ignoriere die oberen n Stellen
55 / 1
56 / 1
Kodierung
Kodierung
• Multiplikation x · y im b-Komplement
• x < 0, y < 0:
• Multiplikation x · y im b-Komplement
• x > 0, y < 0: x ∗ y = x ∗ y − b n ∗ (x − 1)
Ergebnis
}
}
x ∗ y = (2n − x ) ∗ (2n − y )
n Stellen
= 22n − 2n ∗ x − 2n ∗ y + x ∗ y
= 2n ∗ (2n − x − y ) +x ∗ y
|
{z
}
n Stellen
≥2n
z.B. (n = 5): (−3) ∗ (−2) = 6
ignorieren
11101 * 11110
———————————–
0
11101
11101
11101
11101
—————————————
1101100110 = 6
• z.B. b = 2 und n = 5: 3 ∗ (−2) = −6
00011 * 11110
———————————–
0
11
11
11
11
—————————————
0001011010 = -6
57 / 1
58 / 1
Kodierung
Kodierung
• ganzzahlige Division x /y (x > 0, y > 0)
• z.B.: 425 / 18 = 23 Rest 11
Excess-2n−1 -Darstellung
• repräsentiere x als x + 2n−1
• z.B. n = 8: Excess-128 −3 : −3 + 128 = 125 = 011111012
110101001 : 10010 = 10111
10010
100010
ganzzahliger Quotient
10010
100000
10010
11101
10010
1011 Rest
• Zahlenbereich:
[−128, 127]
↓
[0, 255]
• wie 2-Komplement, linkes Bit anders herum
• Vergleiche x ≤ y leichter
• negative Operanden → Umweg über positive
• Divisor = 0 → Fehlermeldung „ZERO DIVIDE“
• auch: Excess-A-Darstellung für A 6= 2n−1 z.B. A = 2n−1 − 1
59 / 1
60 / 1
Kodierung
Kodierung
Excess-23 -Darstellung am Zahlenring
0=1000
−1=0111
1=1001
−2=0110
Gliederung
2=1010
• Bits, Bytes, Dateien
• Darstellung von Texten
−3=0101
3=1011
• Darstellung ganzer Zahlen
−4=0100
• Darstellung von Dezimalzahlen
4=1100
−5=0011
• Festkommazahlen
• Gleitkommazahlen
−6=0010
5=1101
• Fehlertoleranz
−7=0001
6=1110
−8=0000
7=1111
61 / 1
Kodierung
62 / 1
Kodierung
vom Dezimalsystem ins Dualsystem:
(19.359375)10
Darstellung reeller Zahlen
=
19 + 0.359375
=
(10011)2 + ...
Sei b ∈ N mit b ≥ 2 und a ∈ R. Dann ist
a=±
r
X
Der „Rest-Bruch“ wird nun solange umgerechnet, bis er „verschwindet“. (Ausnahme:
periodische Zahlen, s.u.)
ak b k , ak ∈ {0, . . . , b − 1}, ar 6= 0.
k =−∞
0.359375 = 0.71825 · 2−1
= 1.4375 · 2−2
Beispiel
= 1 · 2−2 + 0.4375 · 2−2
vom Dualsystem ins Dezimalsystem:
= 1 · 2−2 + 0.875 · 2−3
(101.1101)2
=
=
=
= 1 · 2−2 + 1.75 · 2−4
1 · 22 + 1 · 20 + 1 · 2−1 + 1 · 2−2 + 1 · 2−4
1
1
1
4+1+ + +
2
4
16
5.8125
= 1 · 2−2 + 1 · 2−4 + 0.75 · 2−4
= 1 · 2−2 + 1 · 2−4 + 1.5 · 2−5
= 1 · 2−2 + 1 · 2−4 + 1 · 2−5 + 0.5 · 2−5
= 1 · 2−2 + 1 · 2−4 + 1 · 2−5 + 1 · 2−6
(19.359375)10 = (10011.010111)2
63 / 1
64 / 1
Kodierung
Kodierung
• “gedachtes Komma” irgendwo an fester Stelle
Der obige Umwandlungsalgorithmus terminiert nicht in jedem Fall:
• integer: ganz rechts
Beispiel:
• oder z.B. bei Geld 2-te Stelle von rechts:
• (0.1)3 = (0.33 · · · )10
• (0.24)10 = (· · · )2 als Übungsaufgabe
|
x5
x4
x3
{z
x2
x1
n=6 Stellen
• reelle Zahlen werden im Rechner etwas anders dargestellt:
• Wert:
x0
}|
x−1
{z
x−2
}
m=2 Nachkommastellen
Pn−1
i =−m
xi · 2i
65 / 1
66 / 1
Kodierung
Kodierung
Umrechnung
• z.B.: 6.37510 =?2 :
6
3
1
:
:
:
2
2
2
=
=
=
Gliederung
x
3R 0 ?
?
?
1R 1 ?
?
0R 1 ?
?
? 0.357
?
?
? 0.75
?
y 0.5
·
·
·
2
2
2
=
=
=
• Bits, Bytes, Dateien
• Darstellung von Texten
0 .75
1 .5
1 .0
• Darstellung ganzer Zahlen
• Darstellung von Dezimalzahlen
• Ergebnis: 6.37510 = 110.0112
• Nachteil: Signifikante Nachkommastellen gehen verloren; z.B.
• Festkommazahlen
• Gleitkommazahlen
m = 2, 0.01101 → 0.01 (abgerundet)
• Fehlertoleranz
• Abhilfe: Gleitkommazahlen
67 / 1
68 / 1
Kodierung
Kodierung
Idee: Speicherung der Zahl und der Position des Kommas
• dezimal:
143.7
=
0.1437 · 103
0.00823
=
0.823 · 10−2
• allgemein:
• Formal: Eine Gleitkommazahl der Form ±m · 2±e heißt normalisiert,
falls
• Beispiele für b = 2:
x = m · be
m Mantisse, b Basis, e Exponent; Abspeicherung als (±m, ±e)
0.00001101 →
• keine eindeutige Darstellung, z.B. (dezimal)
3.14
1
≤ |m| < 1.
b
101.0101 →
0.011001 · 2−4 →
+2
=
0.0314 · 10
=
0.314 · 101 (∗)
=
...
0.1101 · 2−4
0.1010101 · 23
0.11001 · 2−5
• Zahlen werden stets normalisiert dargestellt
• (∗) normalisierte Darstellung: Komma vor Mantisse, erste
Nachkommaziffer 6= 0
69 / 1
Kodierung
70 / 1
Beispiel:
Kodierung
x = +0.1235 · 103
y = +0.5512 · 105
Addition / Subtraktion
z = −0.5511 · 105
x + y = +0.0012 · 105 + 0.5512 · 105
• Angleichung des Exponenten: „Denormalisieren“ des Operanden mit
= +0.5524 · 105
dem kleineren Exponenten
x = mx · 2ex
•
ex
ex
ex
=
<
>
ey :
ey :
ey :
x ±y
x ±y
x ±y
y + z = +0.5512 · 105 − 0.5511 · 105
y = my · 2ey
=
=
=
= +0.0001 · 105
= +0.1 · 102
(mx ± my ) · 2ex
(mx · 2ex −ey ± my ) · 2ey
(mx ± my · 2ey −ex ) · 2ex
(x + y ) + z = +0.5524 · 105 − 0.5511 · 105
= +0.0013 · 105
= +0.13 · 103
• anschließend wieder normalisieren
x + (y + z ) = +0.1235 · 103 + 0.1 · 102
= +0.1235 · 103 + 0.01 · 103
= +0.1335 · 103
Das Assoziativgesetz gilt nicht!
71 / 1
72 / 1
Kodierung
Kodierung
Multiplikation / Division
Zahlenbereich
x ·y
=
(mx · my ) · 2ex +ey
x :y
=
(mx : my ) · 2ex −ey
z >0:
z <0:
negativer
underflow
Eine Darstellung im Rechner (n = 32)
1 Bit
0.5 · 2−128
−(1 − 2−23 ) · 2127
negativer
underflow
z
z
≤
≤
positiver
underflow
(1 − 2−23 ) · 2127
−0.5 · 2−128
darstellbare positive
Zahlen mit Lücken
...
8 Bits
23 Bits
Exponent
Mantisse
−(1−2−23 )·2127
Vorzeichen
der Mantisse
darstellbare neg.
Zahlen mit Lücken
≤
≤
positiver
overflow
...
−0.5·2−128
0
0.5·2−128
(1−2−23 )·2127
Probleme:
2−Komplement−Darstel−
lung des Exponenten
• „Loch um den Nullpunkt“, keine Null
• das linkeste Bit der Mantisse ist immer 1 (b = 2). → überflüssig zu
z.B.: 0 1 1 1 1 1 1 0 0 1 0 1 1 0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .0
speichern!
−4
+0.10112 · 2
=
0.000010112
=
0.0429687510
73 / 1
74 / 1
Kodierung
bis ca. 1980:
seit 1979:
1985:
Kodierung
jeder Computerhersteller hat eigenes Gleitkommaformat
IEEE-Komitee (Institute of Electrical and Electronic Engineers)
IEEE Standard 754, bis heute allgemein akzeptiert
IEEE Standard 754
IEEE Standard 754
• Exponenten
• single precision (32 Bits)
1 Bit
1.
8 Bits
23 Bits
Exponent
Mantisse
• Excess-127, Bereich [−126, +127]
• Excess-1023, Bereich [−1022, +1023]
Vorzeichen
der Mantisse
• kleinste normalisierte Zahl: sp: 2−126 ≈ 10−38 dp: 2−1022 ≈ 10−308
• größte normalisierte Zahl: sp: ≈ 2128 ≈ 1038 dp: ≈ 21024 ≈ 10308
• double precision (64 Bits)
1 Bit
2.
11 Bits
52 Bits
Exponent
Mantisse
Vorzeichen
der Mantisse
• extended precision (80 Bits)
(interner Gebrauch zur Reduzierung von Rundungsfehlern)
75 / 1
76 / 1
Kodierung
Kodierung
• bisher: Kodierung als Darstellung von Zeichen im Rechner
• allgemeiner ist Kodierung die Übertragung von einer Sprache in eine
andere
Gliederung
• d.h. Folgen von Zeichen eines Alphabets werden in Zeichenfolgen eines
• Bits, Bytes, Dateien
• Darstellung von Texten
anderen Alphabets übertragen
• bei der Wahl der Kodierung können die folgenden Aspekte eine Rolle
• Darstellung ganzer Zahlen
• Darstellung von Dezimalzahlen
spielen:
• Eindeutigkeit der Nachricht
• Fehlertoleranz
• Kürze der Nachricht
• effiziente Durchführung der Operationen
• Fehlertoleranz bei Rauschen (Einzelne Bits sind falsch gesetzt.)
• Verschlüsselung (Kryptographie)
78 / 1
77 / 1
Kodierung
Kodierung
Fehlererkennung
• in der Übermittlung von Daten können Fehler auftreten
• Magnetspeicher können ausfallen
• elektronische Speicherstellen können (mit geringer Wahrscheinlichkeit)
• Verwendung von parity bits
• ein Speicher der Länge n nimmt nur Dualzahlen dn−2 dn−3 . . . d0 der
Länge n − 1 auf
ihre Informationen verlieren oder verfälschen
• das Bit dn−1 wird wie folgt gesetzt:
• prinzipiell werden dabei zwei Fehlerquellen unterschieden:

• hard errors: Die Zelle ist physikalisch beschädigt
dn−1 =
• sie liefert immer denselben Wert zurück: (stuck at zero/one)
0,
1,
Pn−2
falls
i =0 di ungerade
sonst
P
• soft errors: Die Information ist verloren, nach neuem Beschreiben aber
• dann muss n−1
i =0 di stets ungerade sein
• andernfalls ist ein Fehler aufgetreten
vorhanden
• dynamische Speicher benutzen kleine Kondensatoren
• Ladung =
b Zustand “1”
entsprechend kann man etwa einer Folge d 1 , . . . d n−1 Vektoren einen
parity-Vektor d hinzufügen, so dass dj die Parität der Summen
Pn−1 i
i =1 dj kontrolliert.
• Ladung kann absinken
79 / 1
80 / 1
Kodierung
Kodierung
Fehlerbehebung
Lemma (Hammingcodes)
• sei c : M → {0, 1}n eine Kodierung in Blöcke der Länge n
• für a, b ∈ {0, 1}n sei d (a, b) = |{i : ai 6= bi }| der Hammingabstand
(i) In einem Blockcode c der Länge n können k gleichzeitig auftretende
Fehler erkannt werden, wenn h(c) ≥ k + 1 ist.
von a, b
• sei h(c) = min{d (a, b) : a, b ∈ c(M )} der Minimalabstand von c.
(ii) Ist h(c) ≥ 2k + 1, so können sie auch korrigiert werden.
Beispiel:
Beweis:
• sei
(i) ist h(c) ≥ k + 1, so kann ein Wort nicht durch k falsche Bits in ein
anderes überführt werden
c(M ) = 00000, 10011, 01010, 11001, 00101, 10110, 01111, 11100.
• dann ist h(c) = 2
• wird z.B. 11011 empfangen und ist maximal ein Bit gekippt, so wurde
(ii) Ist h(c) ≥ 2k + 1, so unterscheidet sich das empfangene Wort vom
gesendeten in ≤ k bits, das empfangene Wort unterscheidet sich von
jedem anderen in mindestens 2k + 1 − k > k Bits.
10011 oder 11001 gesendet.
Anwendungen u.a. in RAID-Systemen.
81 / 1
82 / 1
Herunterladen