2 Repräsentation von elementaren Daten

Werbung
2
Repräsentation von elementaren Daten
Alle (elemtaren) Daten wie Zeichen und Zahlen werden im Dualsystem repräsentiert.
Das Dualsystem ist ein spezielles B-adisches Zahlensystem, nämlich mit der
Basis B=2.
2.1
B-adische Zahlensysteme
Im B-adischen Zahlensystem (mit B ≥ 2, B ∈ N) wird jede reelle Zahl wie
folgt dargestellt:
z=
n−1
P
i=−∞
ai B i mit ai ∈ {0, .., B − 1}, n ∈ N+
Beispiele:
B=10 Dezimalsystem mit ai = {0, 1, .., 9}
953, 48 = 8 · 10−2 + 4 · 10−1 + 3 · 100 + 5 · 101 + 9 · 102
B=2 Dualsystem mit ai = {0, 1}
1011, 01 = 1 · 2−2 + 0 · 2−1 + 1 · 20 + 1 · 21 + 0 · 22 + 1 · 23 = (11, 25)10
B=16 Hexadezimalsystem mit ai = {0, 1, .., 9, A, B, C, D, E, F }
B30E=14 · 160 + 0 · 161 + 3 · 162 + 11 · 163 = (45838)10
B=1 geht nicht, weil nur die 0 darstellbar ist:
n−1
P
z=
0 · 1i = 0
i=−∞
Übliche Schreibweise: Falls z =
n−1
P
ai B i dann schreibt man
i=−∞
z = (an−1 an−2 · · · a0 .a−1 a−2 · · · )B bzw. falls B klar ist
z = an−1 an−2 · · · a0 .a−1 a−2 · · ·
9
2.1.1
Rechnen im B-adischen System
Definition: Seien a, b, q, r ∈ N und es ist a = b · q + r mit 0 ≤ r < b, dann
gilt folgende Schreibweise:
• a mod b = r
• ab = q
Addition: Ziffernweise Addition mit Übertrag
(
(
(
cn−1
dn−1
en−1
en
. . . ci
. . . di
. . . ei
. . . c0
. . . d0
. . . e0
. c−1
. d−1
. e−1
. . . c−m
. . . d−m
. . . e−m
)B
)B
)B
mit ei = (ci + di + üi−1 ) mod B und en = ün−1
h
i
ci +di +üi−1
üi =
und ü−m−1 = 0
B
Beispiel:
A50F.5
0B52.6
B061.B
101011.11
110110.01
1100010.00
Multiplikation: Schriftlich multiplizieren
c=
n−1
P
ci B i
d=
i=−m
c·d = c·
k−1
X
j=−l
k−1
P
dj B j
j=−l
dj B j =
k−1
X
cdj B j =
j=−l
k−1
X
j=−l
n−1
X
i=−m
eij = (ci · dj + üi−1,j ) mod B
h
i
c ·d +ü
üij = i j B i−1,j und ü−m,j = 0
kleinste Stelligkeit B −m · B −l = B −(m+l)
10
ci B i d j
!
Bj =
k−1
X
j=−l
n−1
X
i=−m
ci d j B i
!
Bj
Beispiel:
37.24 · 6.368
22344
11172
22344
29792
23714432
101, 01 · 10, 1
10101
00000
10101
1101001
Wir haben nun gesehen wie man im B-adischen Zahlensystem und insbesondere auch im dualen Zahlensystem ganz schematisch Zahlen addieren und
multiplizieren kann.
Wir Menschen sind es gewohnt im Dezimalsystem zu rechnen, während Rechner im Dualsystem arbeiten → Notwendigkeit Darstellung umzuwandeln
2.1.2
Umrechnung von Darstellungen
b-adische Darstellung → B-adische Darstellung
{z
}
|
{z
}
|
Quellsystem
Zielsystem
Im Prinzip 2 Möglichkeiten, wir sehen uns nur eine an, nämlich Rechnen
im Zielsystem
Beachte: Exakte Umrechnung für Dezimalzahlen nicht immer möglich
Rechnen im Zielsystem (natürliche Zahlen)
• verwende Hornerschema zur Darstellung im Quellsystem, d.h.
z=
n−1
X
ai bi = a0 +a1 b+. . .+an−1 bn−1 = a0 +b(a1 +b(a2 +. . .+b(an−2 +ban−1 ) . . .))
i=0
11
• stelle die ai und b im Zielsystem dar und berechne entsprechenden Term
Beispiele:
Umrechnung der Hexadezimalzahl EF01 ins Dezimalsystem
EF 01 = [1 + 10(0 + 10(F + 10E))]16 = [1 + 16(0 + 16(15 + 16 · 14))]10 = 61185
Umrechnung der Dezimalzahl 81 ins Dualsystem
81 = (1 + 10 · 8)10 = (1 + 1010 · 1000) = 1010001
Bei Dezimalzahlen wendet man obiges Schema getrennt auf Vor- und Nachkommabereich an, d.h.
z=
n−1
X
i
ai b =
i=−m
−1
X
i
ai b +
i=−m
n−1
X
a i bi =
i=0
b−1 (a−1 + b−1 (a−2 + · · · + b−1 (a−m+1 + b−1 a−m)...))
+a0 + b(a1 + b(a2 + · · · + b(an−2 + ban−1 )...))
Problem: Darstellung von b−1 im Zielsystem
z.B. b=10 B=2
(0, 1)10 = 10−1 · 1 ≈ (0, 00011001101)2 = 0, 10009765625
→ Fehler bei Zahlenumwandlung
2.2
Repräsentation von Zeichen
Im Rechner sind nur Binärzahlen repräsentierbar
→ Codierung von Zeichen als Binärzahl
2.2.1
ASCII-Code
• American Standard Code for Information Interchange (1963)
• Initial entwickelt zur Übermittlung und zum Ausdrucken von Texten
⇒ In ASCII sind sowohl Zeichen wie Klein- und Großbuchstaben oder
Ziffern als auch Steuerzeichen zum Drucken codiert
12
• ASCII-Code verwendet 7 Binärstellen → 7 Bit-Code =
b 27 = 128 unterschiedliche Zeichen sind kodierbar
Mittlerweile Standard: 1 Byte = 8 Bit als elementare Repräsentationseinheit im Rechner ⇒ achtes Bit frei ⇒
13
1.
Verwendung als Paritätsbit um Datenübertragung zu überprüfen, d.h.
falls 8.Bit = 0 → restliche 7 Bit enthalten gerade Anzahl von Einsen
falls 8.Bit = 1 → restliche 7 Bit enthalten ungerade Anzahl von Einsen
2.
Erweiterter Zeichensatz → ANSI Extended ASCII
Es gibt jedoch noch viele weitere Zeichen → kyrillisch, arabisch, chinesisch
Rrightarrow Unicode
2.2.2
Unicode
• genormtes System zur Kodierung von
– Textzeichen (Buchstaben, Silbenzeichen, Ideogramme, Satzzeichen,
Sonderzeichen, Ziffern)
– mathematischen, kaufmännischen (z.B. Firmensymbole) und technischen Sonderzeichen
• Versuch alle bekannten Zeichen aller Alphabete zu kodieren, neben
lateinischen Zeichen auch Zeichen für griechisches, kyrillisches, arabisches, hebräisches und thailändisches Alphabet, japanische, chinesische,
koreanische Zeichen auch tote Sprachen wie z.B. Hieroglyphen, Runen
• Version 3.1 (März 2001) umfasst 94.140 Zeichen
→ 3 Byte benötigt, 4 Byte verwendet (Reserve für zusätzliche Zeichen)
⇒ großer (meist unnötiger) Speicherverbrauch
⇒ Verwendung nur der ersten beiden Bytes (→ 65.536 Zeichen) für
gebräuchliche Anwendungen (normale Kommunikation) ausreichend
=
b UCS-2 (universal character set 2)
14
⇒ Codierung mit variabler Länge → UTF-8 (unicode transformation
format)
– Wird nur 1 Byte verwendet ⇒ linkes Bit = 0
→ 128 Zeichen kodierbar = ASCII-Zeichen z.B. 0xxxxxxx
– Werden mehr Bytes benötigt (maximal 4)
→ linkes Bit = 1 ∧ Anzahl der folgenden 1 mit Abschluss 0 gibt die
Anzahl der noch zugehörigen Bytes an, die jeweils mit 10 beginnen
Beispiel:
0xxxxxxx (27 Zeichen)
110xxxxx 10xxxxxx (211 Zeichen)
1110xxxx 10xxxxxx 10xxxxxx (216 Zeichen)
11110xxx |{z}
10 xxxxxx 10xxxxxx 10xxxxxx (221 Zeichen)
bei gestörter Übertragung weiß man, dass hier nicht der Anfang sein
kann
2.3
Repräsentation ganzer Zahlen
Bei heutigen Rechnern werden ganze Zahlen meist in 4 Byte = 32 Bit repräsentiert → 232 = 4.294.976.296 Zahlen darstellbar
Da man auch negative ganze Zahlen darstellen will
→ Halbierung des darstellbaren Zahlenbetrags
2.3.1
Darstellung durch Vorzeichen und Betrag
VZ Betrag in 31 Bit
VZ = 0 falls positive Zahl
VZ = 1 falls negative Zahl
⇒ darstellbarer Bereich
−231 = −2.147.483.648 bis 2.147.483.648 = 231
15
Nachteil: Addition und Subtraktion unterschiedlich
z.B. 5 − 3 = 5 + (−3)
00000101
10000011
10001000 =
b − 8 Widerspruch
2.3.2
Zweierkomplement-Darstellung
Diese Darstellung wird am häufigsten verwendet.
falls x ≥ 0 → 0 . . . x (als Binärzahl)
falls x < 0 → 1 . . . y = 2N − |x| (als Binärzahl)
→ Zweierkomplement, da Komplement zu 2N
Y = 2N − |x| = 2N − 1 − |x| + 1=
(111...11)2 =
b 2N − 1
-(
x)2 =
b
|x|
+(00...001)2 =
b
+1
⇒ 2er-Komplement von |x| → Invertiere alle Bits von x und addiere 1
Rückumwandlung: y = 2N − |x| ⇔ |x| = 2N − y ⇒
analoge Vorgehensweise: Invertierung aller Bits und Addition von 1
z.B. 5 − 3 = 5 + (−3)
00000101
+11111101
100000010
↓
Übertrag ignorieren
00000011
↓Invertieren
111111100
↓Addition von 1
11111101 =(−3)
b
16
z.B. 3 − 5 = 3 + (−5)
00000011
11111011
11111110 =
b −2
↓ Invertieren
00000001
↓ Addition von 1
00000010
2.3.3
Einerkomplement-Darstellung
Falls x ≥ 0 → 0 . . . x (als Binärzahl)
17
Falls x < 0 → 1 y = 2N − 1 − |x| (als Binärzahl)
Invertiere für |x| alle Bits, analog Rücktransformation
z.B. 3 − 5 = 3 + (−5)
00000011
11111010
11111101
↓Invertieren
00000010
NR: 00000101
↓ Invertieren
11111010 =(−5)
b
18
2.4
Repräsentation von Dezimalzahlen
Wegen Beschränkung auf bestimmte Anzahl von Bits → kleiner Ausschnitt
von R darstellbar.
. . x}
Festkommadarstellung: x
. . x} x
| .{z
| .{z
v Bits n Bits
nicht gebräuchlich, da
• bei kleinem v → keine großen Zahlen darstellbar
• bei kleinem n → keine ganz kleinen Zahlen und Nachkommaanteile sehr
ungenau darstellbar
2.4.1
Gleitkommadarstellung
m Mantisse
B Basis
e Exponent
m · Be
z.B.:
1, 245 · |{z}
10
| {z }
m
B
e
z}|{
12
bzw. im Binärsystem
e
z}|{
−
0.1101
2 1010
| {z } · |{z}
|{z}
B
Vorzeichen m
Darstellung nicht eindeutig:
z.B.
1
2
= 0.1 · 20 = 0.01 · 21 = ... = 1.0 · 2−1 = ... (Binärsystem)
⇒normierte Darstellung
z.B.
1≤m<2
19
⇒
1
2
1
4
3
4
→
→
→
1.0 · 2−1
1.0 · 2−2
1.1 · 2−1
⇒ erstes Bit immer 1 →kann weggelassen werden (hidden Bit)
⇒ eine Stelle mehr Genauigkeit, ohne höhere Kosten
Seit 1985 IEEE Standard 754
• einfache Genauigkeit (float → 32Bit)
Da man sowohl große wie auch sehr kleine Zahlen darstellen will
→ Exponent positiv und negativ
Bei 2er-Komplement −128 ≤ e < 127
z.B. Bei Addition muss Exponent verschoben werden →
Exponent in versetzter Darstellung, d.h. implizit wird 127 abgezogen.
z.B.: e = (10110000)2 = 17610 − 12710 = 4910
⇒ −127 ≤ e ≤ 128 (eigentlich, aber -127 und 128 für spezielle Werte)
2−126 ...2127 normalisierter Bereich
Eine mit (se7 ...e0 m22 ...m0 ) dargestellte Gleitkommazahl hat den Wert
(−1)s (1.m22 ...m0 )2(e7 ...e0 −127)
Frage: Wie stellt man 0 dar → geht so nicht direkt
Frage: Warum steht der Exponent vor der Mantisse?
Größenvergleich einfacher → analog ganze Zahlen, falls man
e7 ...e0 m22 ...m0 als ganze Zahl auffasst.
20
Neben den normalen Gleitkommazahlen gibt es spezielle Werte
Exponent
Mantisse Bedeutung
-127 (0...0) 0...0
±0
(keine normalisierte Darstellung möglich)
-127 (0...0)
6= 0...0
0.m · 2−126
denormalisierte Zahl
+128 (1...1) 0...0
±∞
1:0 > 4 → TRUE
+128 (1...1) 6= 0...0
NaN
not a number z.B.:
√
−1
• doppelte Genauigkeit (double → 64 Bit)
d.h.:
(−1)s · 1.m · 2e−1023
0 < e < 2047 (normalisierte Darstellung)
(−1)s · 0.m · 2−1022
Falls e=0 (denormalisierte Darstellung)
größte darstellbare Zahl: ≈ 10308
kleinste positive darstellbare Zahl: ≈ 10−324
2.4.2
Gleitkommaoperationen
Multiplikation:
m1 2 r 1 · m2 2 r 2 =
m 1 m2
| {z }
Multipl. der Mant.
Addit. der Expon.
z }| {
r1 + r 2
·2
1. Bei Addition der Exponenten muss die versetzte Darstellung beachtet
werden, d.h. 2e1 · 2e2 = 2r1 +127 · 2r2 +127 = 2r1 +r2 +127+127
21
korrektes Ergebnis aber: 2r1 +r2 +127
⇒ Addiere beide Exponenten und addiere dann (-127)
2. Multiplikation der Mantissen
- evtl. neu normalisieren
Addit. der Expon.
z }| {
e
+1
z.B. 1.11 × 1.11 = 11.0001 → 1.10001 · 2
3. Vorzeichen sr = (s1 + s2 ) mod 2
Addition:
f = s 1 m1 2 e 1 + s 2 m2 2 e 2
| {z } | {z }
c
d
Beispiel:
1.101 · 20 + −1.111 · 22
(1.625)10 − (7.5)10 = (−5, 875)10
1. Falls e2 > e1 vertausche c und d
−1.111 · 22 + 1.101 · 20
2. Falls s1 6= s2 bilde 2er-Komplement von m2
(Falls m1 negativ wird das Ergebnis (m1 − m2 ) später negiert → m2 −
m1 )
01.101
↓ Inv.
10.010
00.001
10.011 =m
b 2 in 2er-Komplement
3. denormalisiere m2 durch Verschiebung um e1 − e2 nach rechts → beide
Exponenten gleich
arithm. Verschieben
%
&
neg. Zahl → führende 1
pos. Zahl → führende 0
22
e1 − e 2 = 2
11.10011 · 22
4. Addiere beide Mantissen
01.11100
11.10011
(1)01.01111
·22
Überlauf ignorieren
5. normalisiere Ergebnis 1.01111 · 22
6. berücksichtige Vorzeichen:
Falls s1 6= s2 ∧ s1 = 1 → sf = 1
−1.01111 · 22 = −5.875
23
Herunterladen