1/12
2er-Komplementdarstellung: Wie lauten die Schritte bei negativem Vorzeichen?
1. Auffülle
2. Invertieren
3. Addition mit 1
4. Vorzeichen setzen
Bsp:
-11 (8) = 001 001 (2)
110 110 (invertiert)
+000 001 (eins addiert)
110 111 (Ergebnis von Addition mit 1)
00110 111(2er-Komplement) = -11 (8) Ergebnis
Berechnung IEEE754-Gleitkommazahl → Dezimalzahl
Gleitkommazahl 1 1000 0001 11010010..0 als Dezimalzahl dar:
1. 1000 0001(2) in 129(10) => Exponent - Bias = 129-127 = 2
2. Mantisse berechnen mit führender 1 = 1,1101001, nun per Exponent verschieben = 111,01001
3. 111,01001(2) = -7,28125 (10) = minus (weil führende 1), 7, 0,25 + 0,0625 =
Berechnung Dezimalzahl → IEEE754-Gleitkommazahl
Stellen Sie die Dezimalzahl 9,625 als IEEE754 Gleitkommazahl dar:
1. 9,625(10) = 1001,101 (2)
2. Normalisieren auf 1,001101
3. Dualer Exponent aus Kommaverschiebung berechnen, also 3x Komma verschoben = 3 + Bias(127) = 131(10) = 10000011
4. Vorzeichen beachten
5. Zusammenfügen aus Vorzeichen (0), Exponent (10000011) und Mantisse ohne hidden Bit (001101) und auf 32 Bit mit Nullen auffüllen
Was zeichnet eine Variable aus?
Typ, Wert, Name, Speicheradresse
Null-Pointer
Void-Pointer
Null Pointer: Ein Zeiger wird standardmäßig mit NULL initialisiert.
Void-Pointer: Typloser Pointer, der in alle Typen zur Zeiger gecastet werden kann (Bsp: ptr = (typ *) &ptr2; )
Compiler und Interpreter
Compiler: übersetzt Programmcode in Maschinensprache (ausführbarer Code)
Vorteile: effizient, optimiert, schnell
Nachteile: Zeitlicher Kompilierungsaufwand beim Testen
Interpreter: Programmcode in hardware unabhängigen Bytecode umgewandelt. Interpreter setzt Bytecode zur Laufzeit in Maschinencode um und führt diesen aus.
Vorteile: sofortiges einfaches Debugging, Code wird zur Laufzeit generiert.
Nachteile: langsamer
Call by Value
- Eingangsparameter der Funktion haben keine Auswirkungen auf die Parameter außerhalb der Funktion
- Operationen innerhalb der Funktion werden auf den lokalen Parameter-Speicherplätzen ausgeführt
Call by Reference
- bei Funktionseintritt wird die Speicheradresse des Parameters durch die Übergabe der Speicheradressen berechnet.
Bsp: Funktion (&a);
void Funktion (int *a)
- durch Operationen innerhalb der Funktion Änderungen des Parameterwertes wirken sich auch auf die Umgebung der Funktion aus werden direkt auf der so berechneten Speicheradresse ausgeführt
Unärer Operator
Cast, sizeof, präinkrement, postinkrement
Überlauf bei Variablen
Verlassen des Wertebereichs
ternärer Operator
Bsp: x = (y < z) ? y : z;
binärer Operator
a + b