Hallo,
Was genau ist mit Initialisierung gemeint?
https://de.wikipedia.org/wiki/Initialisierung:
"in der Programmierung die Zuweisung eines Initial- oder Anfangswertes zu einem Objekt oder einer Variablen"
Wichtiger als das Verständnis der Bedeutung von Initialisierung finde ich, dass man die Initialisierung eben nicht vergisst. Sonst bekommt man mehr oder weniger zufällige Werte bei Aufruf derjenigen Variablen, die man nicht initialisiert hat.
Also soweit ich verstanden habe die Variable auf einen festen Wert festlegen, bin ich da richtig?
Wenn mit "auf einen festen Wert festlegen" gemeint sein soll, dass der dann unveränderlich an der Variable haften bleibt, dann ist dieses Verständnis falsch. Etwas "auf einen festen Wert festlegen" kann man z. B. mit dem Variablen-Typ const, siehe dazu
http://www.c-howto.de/tutorial/variablen-konstanten/konstante-variablen/Festlegen würde man die Variable foo (z. B. auf den Wert 511) bei der Deklaration mit const foo=511 oder mit der Präprozessoranweisung
# define foo 511
, siehe dazu
http://www.c-howto.de/tutorial/praeprozessor/symbolische-konstanten/Zur folgenden Linksverschiebung (mit den zwei Kleiner-Zeichen <<) lies auf
http://www.c-howto.de/tutorial/variablen/bitmanipulation/ die 12 Zeilen unter "Bit-Verschiebung" durch. Nach einigen selbst ausgedachten durchlaufenen Beispielen merkt man, dass solche Verschiebungen auf Bildung von Zweierpotenzen hinauslaufen.
a= b<<a
In diesem (nach meiner Meinung etwas zu allgemein gehaltenem) Beispiel wird der Wert des (2 hoch a)-fachen von b berechnet und dieser Wert (das Ergebnis dieser Multikplikation mit einer Zweierpotenz) in die Variable a geschrieben. Ich würde erst mal mit
int a=5,a1,a2,a3,a4;
a1 = a<<1; a2 = a<<2; a3 = a<<3; a4 = a<<4;
anfangen, aber erstmal auf Papier vorhersagen, dann den Code kompilieren und mir die Werte zum Vergleich mit der Vorhersage ausgeben lassen.
b*= -3
Ist ne Kurzschreibweise und bewirkt dasselbe wie b = -3*b.
Siehe auf
http://www.c-howto.de/tutorial/variablen/operatoren/ die letzten 8 Zeilen.
d%=3
Kurzschreibweise für d=d%3.
Aber probiers selbst aus. Dass d%=3 und d=d%3 dasselbe bewirken, sieht man, wenn man beim Kompilieren von
#include <stdio.h>
int main()
{
int d=5;
d%=3;
printf("d ist jetzt: %d.\n",d);
}
bzw.
#include <stdio.h>
int main()
{
int d=5;
d=d%3;
printf("d ist jetzt: %d.\n",d);
}
dieselbe ausführbare Datei erhält.
c+ = b*d+4
Das solltest du jetzt selbst beantworten können, wenn du die beiden letzten Kurzschreibweisen verstanden hast.
a = --b + d++
Siehe
http://www.c-howto.de/tutorial/variablen/operatoren/ unter "Besonderheit"
oder auch
https://de.wikipedia.org/wiki/Inkrement_und_Dekrement#Wertzuweisungszeitpunkt_in_.C3.BCbergeordneten_Ausdr.C3.BCckenBeim vorherigen Beispiel wars Prädekrement von b und Postinkrement von d.
Beim nächsten Beispiel Präinkrement von b, Postinkrement von d und Präinkrement von c.
a = ++b * d++ * ++c * (-1)
Da kommt a=-(b+1)*d*(c+1) heraus und nachher sind b, d und c, verglichen mit ihren Werten vor dieser Zeile, um je eins größer.