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, dass 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"):