Kapitel 2:
Datentypen (DT)
Datentyp:
- Wertemenge
- Operationen
abstrakte DT:
"Algebra"
konkrete DT:
Wertemenge ::= Menge der Wertdarstellungen
Operationen ::= Funktionen ¸ber den Wertdarstellungen
DT (¸blicherweise von der Hardware unterst¸tzt):
-Bit
-Bitmuster
-Betragszahl
-Ganzzahl
-Gleitkommazahl
-Textzeichen
-Verbunde aus Elementen (z.B. Text)
(-Maschinenbefehle)
Betragszahlen
Wertemenge : {0,1,2,...,maxb}
Operationen :
Konstanten = 0,1,2,...
Funktionen = +,-,*,/,modulo
( <,>,=,<=,>=,<> ->Achtung:diese Operationen werden auf bool abgebildet! )
Darstellung :
1. Striche |, ||, |||, ||||, |||||, ||||||, ||||||,...
2. r–mische Zahlen I,II,III,IV,V,VI,VII,...
3. Stellensysteme ( auch Ziffernsysteme )
nach folgender Formel (Abb. 2-1) zu berechnen:

Abb.2-1:Stellensysteme
Beispiel: z=13410
dann ist
n=3 und b=10 (hier gegeben)
z0=4, z1=3, z2=1
,d.h. 100*z2+10*z1+1*z0
100*1 +10*3 +1*4 = 134
Es ist:
maxb=bn-1
(D.h. hier: 103-1=1000-1=999 )
Anmerkung: Im Rechner gilt der Basiswert b = 2
Einschub: Das binäre Zahlensystem:
Wandlungen zwischen den Systemen:
2er-System -> 10er-System
Beispiel:
| | 0 | | 1 | | 0 | | 1 |
| = | 0*23 | + | 1*22 | + | 0*21 | + | 1*20 |
| = | | | 4 | | | + | 1 |
| = | 5 | |
Diese Methode geht ¸ber das Bildungsgesetz (Formel Abb. 2-1).
10er-System -> 2er-System
Beispiel:
42
42 : 2 = 21 Rest 0
21 : 2 = 10 Rest 1
10 : 2 = 5 Rest 0
5 : 2 = 2 Rest 1
2 : 2 = 1 Rest 0
1 : 2 = 0 Rest 1
42 = 101010 ( von unten nach oben abgelesen )
oder alternativ:
42 : 32 = 1
10 : 16 = 0
10 : 8 = 1
2 : 4 = 0
2 : 2 = 1
0 : 1 = 0
42 = 101010 ( von oben nach unten gelesen )
Diese Methode wird als Divisionsmethode bezeichnet.
Addition bei bin”ren Zahlen:
1. 1 + 1 = 0 mit Ðbertrag = 1
2. 0 + 1 = 1 + 0 = 1 mit Ðbertrag = 0
3. 0 + 0 = 0 mit Ðbertrag = 0
Anmerkung:
Die Schaltelemente Halb- und Volladdierer sind in der Lage
diese Operation auszuf¸hren, wobei aber nur der Volladdierer
in der Lage ist den Ðbertrag zu ber¸cksichtigen.
Das kleine 1+1 der bin”ren Zahlen (Tab.2-1):
| x | y | üalt | | s | üneu
|
| 0 | 0 | 0 | | 0 | 0
|
| 0 | 0 | 1 | 1 | 0
|
| 0 | 1 | 0 | 1 | 0
|
| 0 | 1 | 1 | 0 | 1
|
| 1 | 0 | 0 | 1 | 0
|
| 1 | 0 | 1 | 0 | 1
|
| 1 | 1 | 0 | 0 | 1
|
| 1 | 1 | 1 | 1 | 1
|
Tab.2-1: das kleine 1+1
Problem: die beschr”nkte Stellenzahl,
dadurch wird eine Bereichs¸berschreitung m–glich
z.B.: 8 Bit, d.h. maxb=28-1=255, aber bei der Addition
155 (aus 8Bit)
+ 128 (aus 8Bit)
= 283 > 255 (,d.h. nicht aus 8Bit)
mögliche Prozessorreaktionen:
a) eine Fehlermeldung
b) Modulo-Arithmetik anwenden
=> beides, d.h. Fehler-Signalisierung unterdrückbar
Die Modulo-Arithmetik:
ein Beispiel:
gegeben: n=3, d.h. Zahlen von 0-7 sind darstellbar.
3+7 = 2
dies berechnet sich aus folgender Formel:
3+7=(3+7) mod 2n
in binärer Form:
011
+ 111
= 010
oder allgemein:
a+b::=(a+b) mod Bereichn
veranschaulicht wird die Modulo-Arithmetik in Abb. 2-2

Abb.2-2: die Modulo-Arithmetik
Ganze Zahlen
Wertebereich: { ming,...,-1,0,1,...,maxg }
Operationen : +,-,*,/,mod
Darstellungsformen (spez. negative ganze Zahlen):
- Vorzeichen, Betragszahl
Bsp.: -5 => 10101
Aber es gibt zwei Nullen:
10000 und 00000
- Einerkomplement
Bsp.: 00101 (steht für die 5)
not (steht für das Minuszeichen -)
= 11010 (das Einerkomplement bildet nun die negative ganze Zahl)
Aber auch hier:
Es gibt zwei gültige Nullen einmal 11111 (steht für -0) und 00000 (steht für +0)
Bei sämtliche Operationen muß nun eine Fallunterscheidung gemacht werden.
=> Einführung des Zweierkomplements:
00101
not
= 11010 ( Einerkomplement )
+ 00001 ( addiere 1)
= 11011 ( Das Zweierkomplement )
daraus folgt für den Bereich der darstellbaren Zahlen, daß
[ming = -2n-1,...,maxg = 2n-1-1] mit n = Anzahl der Bitstellen
Festkommazahlen
Festkommazahlen werden nach folgender Formel (Abb. 2-3) berechnet:

mit n Stellen vor und m Stellen hinter dem Komma
und mit b als Basis des Zahlensystems.
Abb.2-3: Formel für Festkommazahlen
Beispiele:
- 16,25
1*101 + 6*100 + 2*10-1 + 5*10-2
- 1000,010
1*103 + 0*102 + 0*101 + 0*100 + 0*10-1 + 1*10-2 + 0*10-3
Gleitkommazahlen
Gleitkommazahlen bilden eine Annäherung an die reellen Zahlen.
( Annäherung, weil wir eine endliche Wertemenge haben und darunter
die Genauigkeit leidet. )
Reelle Zahlen werden durch folgende Formel dargestellt:
Z = M*gE (wobei M die Mantisse, g die Basis und E den Exponenten bildet)
ein Beispiel:
16,25 = 0,1625 * 102
diese Darstellung läþt sich wie folgt aufschlüsseln:
- die ersten vier Ziffern
sind die Nachkommastellen der 0,1625 (man zieht immer das "," vor die erste Ziffer).
Dadurch, daþ man jetzt die 1625 also die Nachkommastellen hat, kann
man diesen Teil als Festkommazahl speichern.
- Da das Komma verschoben wurde muþ man feststellen, um wieviele Stellen
es verschoben wurde. Die Anzahl der Stellen spiegelt sich im Exponenten
wieder. Die letzten beiden Ziffern bilden den oben genannten Exponenten,
dieser wird als Ganzzahl gespeichert.
Exponentenanpassung und die Problematik:
16,25 = 0,1625 * 102
= 0,01625 * 103
=> 5 fehlt!! Verlust der Genauigkeit
Gleitkommazahlen "Normalisierung"
Normalisierungsbedingung: 1/g < |m| <1
( das höchstwertige gesetzte Bit, steht direkt hinter dem Komma )
und wieder ein Beispiel:
0,16*102 + 0,3*104 ( Exponentenanpassung )
= 0,0016*104 + 0,3*104
=> 0,0016*104 + 0,3000*104 = 0,3016*104 ( Normalisieren, falls erforderlich )
Gleitkommazahlen "Anomalien"
Näherungen an die Menge der reellen Zahlen.
daher:
(x+y)+z = x+(y+z) (gilt nicht immer)
wir machen auch hier ein Beispiel:
0,1*103 + 0,3*101 + 0,8*101
Berechnung linke Seite ( (x+y)+z ):
(0,1*103 +0,003*103) +0,008*103 ( Klammer bindet )
(0,10*103) +0,008*103
= 0,10*103
Berechnung rechte Seite ( (x+(y+z) ):
0,1*103 +(0,3*101 +0,8*101) ( Klammer bindet)
0,1*103 + 1,1*101
0,10*103 + 0,011*103
= 0,11*103
Offensichtlich ist die rechte Seite ungleich der linken Seite
Gleitkommazahlen "Charakteristische Parameter"
minreal : kleinste darstellbare Zahl
maxreal : gröþte darstellbare Zahl
smallreal : kleinste Zahl x, mit x>0 und 1.0+x>1.0
genormte Formate: IEEE-7754
- einfach genau:
32bit
mit 1bit M-Vorzeichen
8bit Exponent (Basis 2)
23bit Mantissenbetrag
- doppelt genau:
64bit
mit 1bit M-Vorzeichen
11bit Exponent (Basis 2)
52bit Mantissenbetrag
minreal = -(1-2m) *g(2e-1-1)
maxreal = -(1-2-m) *g(2e-1-1)
smallreal = 21-m
Textzeichen
Wertemenge = { Buchstaben } + { Sonderzeichen } + { Ziffern } + { Steuerzeichen }
Beispiel: ISO-7bit-Code (US-ASCII)
- 1 Zeichen pro Byte, wobei das erste Bit das Paritätsbit (Prüfbit) bildet
- druckbare Zeichen ("A","0",",",...)
- Formatsteuerzeichen (CR,LF,HT,VT,...)
- Übertragungssteuerzeichen
|
Folgen variable Länge:
Wertebereich=WGtyp*
- Länge vorangestellt
- Endezeichen
- Füllzeichen
- aus Inhalt Länge schlieþbar
- Anfang nächster Folge erkennbar (Fano-Bedingung)
Maschinenbefehle
Bitmuster:
| Operationscode | Argument | Argument |
a) feste Länge
b) unterschiedliche Länge
- des OP-Codes
- der Argumente
- der Parameterliste (variable Argumentenzahl)
=> häufig auftretende Befehle : kurz
häufig auftretende Argumente : kurz
i.a. Länge in ganzzahligen Vielfachen einer Grundeinheit
( meist 2 -> 32bit)
Problematik: ein und dasselbe Bitmuster kann zulässige Werte
verschiedener Typen darstellen !
zum Beispiel:
kann sein:- eine 8bit-Betragszahl "192"
- eine 8bit-Ganzzahl "-64"
- ein ISO/7-bit Zeichen "@"
=> Programmierfehler sind spät entdeckbar
=> verschiedene OP-Codes, z.B.:
+ Betrag
+ Ganzzahl
+ Gleitkommazahl
=>Typkennungen:
- neuere experimentelle Architekturen
mit obligatorischer Typkennung ("tag")
bestehend aus dem "tag" (hier Indikator für eine 8bit-Betragszahl):
+
und dem Code (Betragszahl "192"):