Beruflich Dokumente
Kultur Dokumente
Typ, Wert, Adresse men Typ, Wert, Effekt (potentiell) volatile Für Optimierungszwecke
register Variable wird in Prozessorregister
anstelle des RAM’s gespeichert,
Informatik I dadurch ist der Zugriff schnell.
• R-Werte: Alle L-Werte können als R-Werte, static Variable ist global gespeichert für
Dominik Werner aber nicht umgekehrt, verwendet werden. Kann die Dauer der Ausführung.
seinen Namen nicht ändern (Bsp.: Literal) mutable Variable kann von const-
dowerner@student.ethz.ch • Literale: Konstante Werte (fester Typ)
Funktionen editiert werden.
• Operatoren: Verknüpfen Ausdrücke zu neuen extern Definiert, dass eine Variable an ei-
19. August 2014 nem anderen Ort deklariert ist.
Ausdrücken.
Operatoren Präzedenz
Datentypen
Programmbestandteile
Beschreibung
• Konstanten: ”Variablenmit unveränderbarem
Assoziation
Wert Typ Grösse Bereich
Präzedenz
Operator
char 1 Byte −128 bis 127
– Es ist üblich, die nicht verändert werden short 2 Bytes −320 768 bis 320 767
müssen als Konstanten zu definieren int 2/4 Bytes oben/unten
→ Constcorrectness −20 1470 4830 648 bis
long int 4 Bytes
20 1470 4830 647 1 :: Scope resolution →
• Bezeichner und Namen: Erstes Zeichen, im- bool 1 Byte 0/1 ++ -- Suffix/postfix Ink/Dek
mer ein Buchstabe. Erlaubt: AZ, az, 09, float 4 Bytes 1.2e − 38 bis 3.4e38 type() Function-type-cast
• Kommentare/Layout: Spielen für den Compi- Qualifizierter Name: double 8 Bytes 2.2e − 308 bis 1.8e308 () Funktionsaufruf
ler keine Rolle (nur zu Übersichtszwecken) 2 →
• Objekte: Repräsentation eines Speicherwertes long double 12 Bytes [] Array-Subscript
(mit oder ohne Namen), haben immer: Typ, wchart t 2 Bytes −320 768 bis 320 767 . Selek. über Ref.
• Include-Direktiven: So werden externe Re- Adresse, Wert void - kein Typ -> Selek. über Ptr.
sourcen eingebunden → Grössen von Typen hängen von der Plattform ++ -- Prefix Ink/Dek
ab (x86, x64). + - Unary plus, minus
Allgemein gilt: sizeof(char)==2 ≤ short ≤ int ≤ ! ~ logisch NOT, bitweise NOT
– Um Methoden einer bestimmten Klasse ein- long int ... (type) C-Style Typecast
facher aufrufen zu können, kann ein using- 3 * Dereferenzieren ←
statement verwendet werden. unsigned: Bewirkt, dass keine negativen Werte & Adress-Operator
möglich sind ⇒ doppelter positiver Wert sizeof Grösse (in Bytes)
• main-Funktion: Wird beim Programmstart new Dynamic memory alloc.
ausgeführt. delete Dynamic memory dealloc.
Inline Typen-Spezifikation 4 .* -> Pointer to member →
5 * / % Mult, Div, Modulo →
6 + - Addition, Subtraktion →
7 << >> Bitwise Shift →
< <= Relationsop. < und ≤
• Werte, Effekte: Bestimmen, was das Programm 8 →
> >= Relationsop. > und ≥
macht. 9 == != Relationsop. = und 6= →
10 & Bitwise AND →
Variablen Deklaration 11 ^ Bitwise XOR →
12 | Bitse OR →
13 && Logisch AND →
14 || Logisch OR →
• Typen und Funktionalität: Jeder Typ in C++
? bedingte Zuweisung
hat einen Wertebereich und eine Funktionalität.
= direkte Zuweisung
• Literale: Konstante Werte (fester Typ) += -= Summen/Differenz Zuwei.
15 ←
*= = %= Prod./Div./Mod. Zuwei.
• Ausdrücke Expressions: Repräsentieren Be- <<= >> = Shift Zuweisung
rechnungen, haben: Typ, Wert, Effekt (poten- &= ∧= |= AND/OR/XOR Zuwei.
tiell) 16 throw Throw Operator ←
17 , Komma →
Inkrement/Dekrement etc. Const-Regeln
Syntax
Aliase
IF/ELSE
Arrays
Bedingte Rückgabe
Mit den Operatoren ? : kann eine bedingte
Rückgabe realisiert werden: Vektor-Iteratoren
FOR-Schleife
möglich ist auch:
Pointer-Arithmetik Strings sind nicht primitiv (aber auch keine wirkli- Referenzen
Durch Addition, kann von Speicherstelle zu Spei- chen Vektoren):
Do-While-Schleife cherstelle gesprungen werden, dabei wird nicht Const-Objekte können nur const-Referenzen zuge-
Byteweise gesprungen, sondern der Grösse des Da- wiesen werden!
Rumpf wird mindestens einmal ausgeführt. Einzi- tentyps entsprechend.
ge Schleife, bei der ein ; am Ende notwendig ist!
Vektoren
Subtraktion von 2 Pointern, gibt den Abstand
im Speicher zurück (dh. Anzahl Objekte dazwi- Vektoren sind KEINE Primitives und kennen ihre
schen). Grösse.
Funktionen Structs
Templates (Generics)
C-Assert
Klassen
Funktionen können auch Referenzen als
Rückgabetyp haben, sollten dann aber auch Call
Überladen von Operatoren
by Reference sein!
Klassen sind dynamische Datentypen wie Structs,
C++ unterstützt das Überladen von Operatoren Um Performance zu sparen, können Referenzen bieten aber die Möglichkeit, zum Informationhi-
(+,-,*,/,..): verwendet werden, damit nicht jedes Mal eine ding, dh. man kann Zugriffsparameter festlegen.
Kopie des Objekts erstellt werden muss.
– friend → Nur friends haben Zugriff. Binäre Darstellung
Zweierkomplement
Kopierkonstruktor
Der Kopierkonstruktor einer Klasse A ist der ein- Abstrakte Methoden können definiert werden, da- Most (MSB) & Least (LSB) Significant Bit
deutige Konstruktor mit der Deklaration A(const mit eine Methode nicht in der Basisklasse, sondern
in den Subklassen realisiert werden muss. Ein MSB: Bit mit grösstem Stellenwert
A& x); LSB: Bit mit kleinstem Stellenwert
Er wird automatisch aufgerufen, wenn Werte vom Subklassen können auch Methoden in der Ba- Klasse mit einer Abstrakten Methoden, wird selbst
sisklasse überschreiben und so ersetzten, allerdings Abstrakt und kann nicht mehr instanziert werden! 10010101
Typ A mit Werten vom Typ A initialisiert werden.
Falls kein Kopierkonstruktor definiert wurde, wird ist es hierzu notwendig, dass in der Basisklasse
implizit einer angenommen, der mitgliedweise in- das Keyword virtual vor die Methode geschrieben In den Subklassen, müssen alle abstrakten Me- Rechnen im Dualsystem
itialisiert. wird, da sonst wenn die Subklasse als einem Pointer thoden implementiert werden!
des Types der Basisklasse zugewiesen wird, nicht Beide Zahlen müssen die GLEICHE Anzahl
die Methode der Subklasse aufgerufen wird. Bits haben!
→ 1100
| {z0101} − 0110
| {z } ⇒ 1100
| {z0101} − 0000
| {z0110}
8Bit 4Bit 8Bit 8Bit
Destruktor
Excess-3
3. Vorkommazahl und Nachkommazahl addieren:
O’Brian
Division 0111 7 7 7
4-2-2-1
101 + 010111101
| {z } = 101.010111101
Aiken
Binär
1000 10 8 8
BCD
HEX
Gray
DEZ
|{z}
Binärzahlen werden mittels Modulo Operation di- 5 0.37 1001 11 9 9
vidiert, wobei dies beim MSB beginnt und dann je- 1010 12 10 A
4. Normalisieren: 5.3710 = 1.010101111012 · 22
weils der Rest vor jede weitere Stelle angefügt wird: 0 0 0000 0 0 0 -3 0 1011 13 11 B
Addition/Subtraktion 1 1 0001 1 1 1 -2 1 1100 14 12 C
2 2 0010 2 3 2 -1 0 2 1101 15 13 D
Wie bei normalen Binärzahlen, wobei es wichtig ist,
3 3 0011 3 2 3 0 3 1110 16 14 E
dass beide Zahlen den selben Exponenten haben.
4 4 0100 4 7 4 1 4 1111 17 15 F
→ De-normalisieren
5 5 0101 5 6 2 3
Richtlinien für Fliesskommazahlen 6 6 0110 6 4 3 1 4
7 7 0111 7 5 4 2 5 Zweierpotenzen
• Regel 1: Teste keine zwei Fliesskommazahlen auf
Fliesskommazahlensysteme 8 8 1000 8 15 5
Gleichheit!
Stattdessen überprüfen, ob sich ein Wert inner- 9 9 1001 9 14 6 20 1 2−1 0.5
halb einer gewissen Toleranz befindet. 10 A 1010 12 7 9 21 2 2−2 0.25
F ∗ (β, p, emin , emax ) b0 .b1 b2 b3 b4 · β e
11 B 1011 13 5 8 22 4 2−3 0.125
12 C 1100 8 6 9 5 8 23 8 2−4 0.0625
• β ≥ 2, die Basis: Gibt das Zahlensystem an 13 D 1101 9 7 10 6 9 24 16 2−5 0.03125
(zB.: Binär). 14 E 1110 11 8 11 8 25 32 2−6 0.015625
15 F 1111 10 9 12 7 26 64 2−7 0.0078125
• p ≥ 1, die Präzision: Anzahl Stellen, das Vor-
zeichenbit kommt beim Zweierkomplement noch 27 128 2−8 0.00390625
dazu! 28 256 2−9 0.001953125
29 512 2−10 0.0009765625
• emin , der kleinste Exponent Eigenschaften 210 1024
• Regel 2: Vermeide die Addition von Zahlen sehr 211 2048
• emax , der grösste Exponent unterschiedlicher Grösse! 212 4096
• Gray: keine Hazards beim linearen Zählen (nur 213 8192
Normalisierte Darstellung: • Regel 3: Vermeide die Subtraktion von Zahlen 1 Bit Schritte) 214 16384
sehr ähnlicher Grösse!
4 215 32768
| {z } ·2 = 10110.01
1.011001
M atisse Float / Double (IEEE Standard 754) 216 65536
• BCD: Binary coded digit → Ziffern
• Single precision (float) Zahlen:
Umrechnung: Dezimal → Binär Algorithmen und Datenstrukturen
F ∗ (2, 24, −126, 127) (32 Bit)
• 9er-Komplement durch invertieren: Exc3, Aiken
1. Vorkommastelle von der Zahl subtrahieren und
als Binärzahl darstellen: – 1 Bit für das Vorzeichen
Ägyptische Multiplikation
– 23 Bit Mantisse (ohne führendes Bit)
• Einschrittige Codes (Hazard-frei): O’Brian, Gray
– 8 Bit für den Exponenten (256 Werte, 254 Ex-
2. Für die negativen Stellen, binäre Expansion ponenten, 2 Spezialwerte: 0, ∞, ...)
durchführen: • Einschrittige, zyklische Codes: O’Brian, Gray
• Double precision (double) Zahlen:
F ∗ (2, 53, −1022, 1023) (64 Bit)
(
1 x0i ≥ 1
bi = • Kein Wert bei Speisungsausfall (0000): Excess-3,
0 x0i < 1
– 1 Bit für das Vorzeichen O’Brian
Ackermann-Funktion Insertion Sort Heap Sort Quick Sort
Merge Sort
Bäume
Sortieralgorithmen
Bubble Sort
Darstellung: A(B(D(I, J, K), F ), C(G, H))
Best Average Worst
Aufwand: Wurzelbäume
n n2 n2
Binäre Suchbäume
Delete:
Stack (LIFO)
Ein Stack oder LIFO (Last In First Out), speichert
Daten welche durch die push(a) Funktion äufge-