Hello World!
Eine Einführung in das Programmieren
Variablen
Görschwin Fey
Institute of Embedded Systems
Hamburg University of Technology
Brückenkurs Hello World!Slide 2
Wie werden Daten in Programmen gespeichert und manipuliert?
10.10.2019 Variablen 2
Brückenkurs Hello World!Slide 3
Darstellung von Werten
Variablen
0 0 0 0 1 0 11
8 Register bzw. 8 Bit
= 1 Byte
=„8 mal 2 Möglichkeiten“
zur Darstellung von
Werten
28 = 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 = 256
Erst durch einen Datentyp wird der Binärdarstellung ein Wert
zugeordnet!
10.10.2019 3
Brückenkurs Hello World!Slide 4
Natürliche Zahlen
Variablen
0 0
0 1
1 0
1 1
„4 Mögliche“
Belegungen
bei 2 Bits
Jedem Bit wird als Wertigkeit die Anzahl der vorherigen möglichen
Belegungen zugeordnet.
27 26 25 24 23 21 2022
128 64 32 16 8 2 14
Das 3. Bit hat
Wertigkeit 4
10.10.2019 4
Brückenkurs Hello World!Slide 5
Natürliche Zahlen
Variablen
0 0
0 1
1 0
1 1
„4 Mögliche“
Belegungen
bei 2 Bits
Jedem Bit wird als Wertigkeit die Anzahl der vorherigen möglichen
Belegungen zugeordnet.
27 26 25 24 23 21 2022
128 64 32 16 8 2 14
255
+
28 = 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 ∙ 2 = 256
Auch die „0“ ist ein Wert: 0 0 0 0 0 0 00
10.10.2019 5
Brückenkurs Hello World!Slide 6
Natürliche Zahlen
Variablen
Zur Umrechnung der Binärdarstellung in das Dezimalzahlsystem werden…
1. die Bits mit ihrer Wertigkeit multipliziert
2. die Ergebnisse miteinander addiert
Mit 8 Bit lassen sich positive Werte nur im Bereich 0 bis 255 darstellen.
1 1 1 0 1 0 11Binär
128 64 32 16 8 2 14Wertigkeit
128 64 32 0 8 0 14Ergebnis
Multiplikation
237
+
Dezimal
10.10.2019 6
Brückenkurs Hello World!Slide 7
Ganze Zahlen
Variablen
1 1 1 0 1 0 11
-128 64 32 16 8 2 14
-128 64 32 0 8 0 14
1 1 1 0 1 0 11
128 64 32 16 8 2 14
128 64 32 0 8 0 14
237 109-128 +
-19
+ +
unsigned char signed char
Erinnerung: 2er-Komplement 𝑣2 𝑧𝐵 = (−2)𝑛∗ 𝑧𝑛 + σ𝑗=0𝑛−1 𝑧𝑗𝐵
𝑗
Tatsächliche Darstellung ist vom Rechner abhängig
10.10.2019 7
Brückenkurs Hello World!Slide 8
Datengröße
Variablen
1 1 1 0 1 0 11
0 0 1 0 1 1 11
1 1 0 1 0 1 00
8 Bits
1 Byte
16 Bits
2 Byte
32 Bits
4 Byte
Der Arbeitsspeicher ist in Bytes organisiert.
Wenn ein Byte nicht reicht, dann nimmt man einfach mehr!
256 Werte
65536 Werte
4294967296 Werte
10.10.2019 8
Brückenkurs Hello World!Slide 9
Primitive Datentypen in C++
Datentyp Bit Wertebereich Anfang Wertebereich Ende
char 8 -128 127
unsigned char 8 0 255
short 16 -32 768 32 767
unsigned short 16 0 65 532
int 32 -2 147 483 648 2 147 483 647
unsigned int 32 0 4 294 967 295
long 64 -9 233 372 036 854 755 808 9 233 372 036 854 755 807
unsigned long 64 0 18 466 744 073 701 511 613
float 32 1.2 ∙ 10-38 3.4 ∙ 1038
double 64 2.2 ∙ 10-308 1.8 ∙ 10308
Variablen10.10.2019 9
sizeof(Typ) liefert Größe von Typ in Byte
Brückenkurs Hello World!Slide 10
ASCII-Standard
Um Schriftzeichen bzw. Symbole abzuspeichern wird eine Zuordnung bzw.
festgelegte Codierung benötigt.
Weit verbreitet ist der ASCII-Standard → Ein Wert wird eindeutig einem
Zeichen zugeordnet.
Beispiel: entspricht „z“
entspricht „€“
Auch Sonderzeichen wie z.B. „Zeilenumbruch“ haben einen Code
Im Internet lassen sich diverse ASCII-Tabelle finden, in denen die
Zuordnung beschrieben wird.
Variablen
7A
80
10.10.2019 10
Brückenkurs Hello World!Slide 11
Variablen
Das Anlegen der Variable erfolgt in zwei Schritten:
1. Deklaration – Speicherplatz für die Variable reservieren
• Datentyp legt fest, wieviel Speicher reserviert werden muss
• Die Variable braucht einen Namen bzw. einen Bezeichner
2. Initialisieren – Der Variablen den ersten Wert zuweisen
• Vor der Initialisierung hat die Variable keinen wohldefinierten Wert
• Der Inhalt des reservierten Speichers wird nach der Vorschrift des
Datentyps interpretiert
Variablen
Datentyp Bezeichner;
Bezeichner = Wert;
10.10.2019 11
Brückenkurs Hello World!Slide 12
Variablen
Die Variable kann auch in einem Schritt deklariert und initialisiert werden.
Variablen
Datentyp Bezeichner = Wert;
int a;
a = 3;
Beispiel: getrennte Deklaration und Initialisierung
Beispiel: gemeinsame Deklaration und Initialisierung
int a = 3;
Beide Varianten funktionieren auch mit mehreren Variablen gleichzeitig:
int a,b;
a = 3;
b = 3;
int a = 3, b = 3;
10.10.2019 12
Brückenkurs Hello World!Slide 13
Bezeichner
1. Der Bezeichner kann aus den folgenden Zeichen gebildet werden.
2. Der Bezeichner KANN Ziffern enthalten, darf aber NICHT mit einer
Ziffer beginnen.
3. Schlüsselwörter von C++ sind KEINE zulässigen Bezeichner.
Variablen
$ a b c d e f g h i j k l m n o p q r s t u v w x y z
_ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 0
10.10.2019 13
Brückenkurs Hello World!Slide 14
Beispiel: Bezeichner
Die Umlaute ä, ö, ü und ß sind in Bezeichnern nicht erlaubt.
Variablen
sonderMüll
kunde_straße
Ölstand
3Rad
while
…
Nichtzulässige Bezeichner
_unterstrich
__2Unterstriche
whileTrue
X
kuehlung_an
…
Zulässige Bezeichner
Tipp: Programme sind besser lesbar und verständlicher durch
• aussagekräftige Bezeichner wie z.B. reifenDruck oder
speed_kmh
• englischsprachige Bezeichner bevorzugen; so werden Umlaute
vermieden
10.10.2019 14
Brückenkurs Hello World!Slide 15
Was ist ein Operator?
Variable Operator Variable
10.10.2019 Variablen
Ergebnis der Operation
• Dient der Manipulation von Variablenwerten und liefert ein Ergebnis• Funktion, die von einem Operator implementiert wird, ist abhängig von
Typen der Variablen, auf die er angewendet wird
• Beispiel:Binärer Operator wird auf zwei Variablen angewendet:
15
Brückenkurs Hello World!Slide 16
z = x % y; 3Modulo-Operation
Rest der ganzzahligen Division
Rudimentäre Operationen
10.10.2019 Variablen
int x = 7;
int y = 4;
int z;
z = x / y;
z = x + y; 11
z = x - y; 3
z = x * y; 28
1
7 / 4 = 1 Rest 3
Ganzzahlige Divisonbei Anwendung auf int
übliche Division bei float
16
Brückenkurs Hello World!Slide 17
Increment und Decrement
Addiert 1 zu einer Variablen
10.10.2019 Variablen
++
Inkrement
--
Dekrement
Subtrahiert 1 von einer Variablen
int a = 5;
a++; // a ist 6
a--; // a ist 5
Beispiel:Das Addieren / Subtrahieren erfolgt
nach der Anweisung.
int a = 5, b = 5, c;
c = 3 + --a; // c ist 7; a ist 4
c = 3 + b--; // c ist 8; b ist 4
17
Subtraktion vor der Anweisung!
Brückenkurs Hello World!Slide 18
Vergleiche und Relationen
10.10.2019 Variablen
==
Gleichheit
!=
Ungleichheit
>=
größer gleich
<=
kleiner gleich
<
echt kleiner
>
echt größer
int x = 7;
int y = 4;
x == y;
x != y;
Inhalt von x
und y
vergleichen.
3 > 3; //False
3 >= 3; //True
Reihenfolge der Zeichen wie gesprochen
z. B. kleiner (<) gleich (=)
Was ist das Ergebnis einer Vergleichsoperation?
18
Brückenkurs Hello World!Slide 19
Logisch Vergleichen
Ein Datentyp fehlt noch…
Wahrheitswerte werden in Variablen vom Typ bool (kurz für boolean)
abgespeichert
10.10.2019 Variablen
bool
true false
Variablen vom Typ bool können logisch miteinander verglichen werden
&&
Logisches AND
||
Logisches OR
!
Logisches NOT
19
Brückenkurs Hello World!Slide 20
Vieles geht! Aber was kommt heraus?
float a= 2.5;
float b= 3.5;
float c= b/a;
int d= b/a;
cout <<"c " <<c <<endl;
cout <<"d " <<d <<endl;
int e= c;
cout <<"e " <<e <<endl;
Ausgabe:c 1.4
d 1
e 1
10.10.2019 Variablen 20
Brückenkurs Hello World!Slide 21
Vorsicht bei Typkonvertierungen
unsigned char o= 255;
signed char p= (signed char)o;
int q= o;
cout <<"q " <<q <<endl;
q= p;
cout <<"q " <<q <<endl;
Ausgabe:
q 255
q -1
10.10.2019 Variablen 21
„Cast“ – explizite
Typkonvertierung
Brückenkurs Hello World!Slide 22
Welcher Operator hat Vorrang?
Die Operatoren haben eine Priorität mit der sie ausgeführt werden. Hier mit
absteigender Priorität:
Durch das Setzen von Klammern (…), kann die Interpretation eines
Ausdrucks beeinflusst werden. Klammern haben immer die höchste
Priorität.
Wenn eine Unsicherheit bleibt, wie ein Ausdruck interpretiert wird, sollten
immer Klammern gesetzt werden!
10.10.2019 Variablen
(…) ++ -- (Vorzeichen +/-) ! ~ * / % + - << >> < <= >
>= == != & ^ | && || = += -= *= /= %= >>= <<= &= |= ^=
22
Brückenkurs Hello World!Slide 23
Zusammenfassung Operationen und Operatoren
• Seien
int a, b=1, c=2;
bool r= false, l;
• Arithmetisch +, -, *, /
a= 5; // Zuweisung
a= b+c; // Addition
a+= b; // entspricht a= a+b;
• Vergleiche ==, <=, >=
r= a >= b; // -> r= true
• Logisch &&, ||, !
l= !r; // r==true -> l= false
10.10.2019 Variablen 23
Brückenkurs Hello World!Slide 24
Kommentare
Mit zwei Schrägstrichen (//) wird ein einzeiliger Kommentar eingeleitet.
Variablen
// Kommentar
/*
Kommentare
*/
Mit (/*) beginnt ein mehrzeiliger Kommentar, der mit (*/) wieder beendet
wird.
10.10.2019 24
Brückenkurs Hello World!Slide 25
{
Anweisung 1;
Anweisung 2;
…
Anweisung n;
}
Sequenzen
Mehrere Anweisungen werden mit geschweiften Klammern zu einem Block
resp. zu einer Sequenz von Anweisungen zusammengefasst.
Variablen
{
Anweisung 1;
Anweisung 2;
…
Anweisung n;
}
Zur besseren Lesbarkeit eines Programms, werden alle Anweisungen
innerhalb des Blocks mit einem „Tab“ eingerückt.
10.10.2019 25
Brückenkurs Hello World!Slide 26
Scopes
Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich für
Variablen
Variablen
int a = 3;
{
int b = 2;
{
int c = 1;
}
}
{
int a = 1;
}
int a = 3
int b = 2
int c = 1
int a = 1
10.10.2019 26
Brückenkurs Hello World!Slide 27
int a = 3
Scopes
Jede Sequenz von Anweisungen hat einen eigenen Geltungsbereich für
Variablen
Variablen
int b = 2
int a = 3
int c = 1
int b = 2
int a = 3
int a = 1
Die Variable ist in dem Scope der
Sequenz, in der sie definiert
wurde, und in den eingebetteten
Sequenzen sichtbar.
Erneute Definition einer Variable
überschreibt die Sichtbarkeit der
äußeren Variable.
Erneute Definition innerhalb
eines Scopes ist nicht erlaubt.
10.10.2019 27
Brückenkurs Hello World!Slide 28
Beispiel: Scopes
Variablen
{
int b = 2;
}
int a = b; ➔ Fehler: Variable b ist nicht definiert!
int a = 4;
{
a = 3;
}
cout << a;
int a = 4;
{
int a = 3;
}
cout << a;
Es wird 3 ausgegeben! Es wird 4 ausgegeben!
Schlecht lesbar -> vermeiden10.10.2019 28
Brückenkurs Hello World!Slide 29
Fortsetzung: Scopes
Noch einmal dasselbe Beispiel:
• Nach Verlassen der Sequenz kann auf die
Variable a mit dem Wert 3 nicht mehr
zugegriffen werden.
• Die Variable a mit dem Wert 3 wird nach
der Sequenz aus dem Speicher gelöscht.
Variablen
int a = 4;
{
int a = 3;
}
cout << a;
10.10.2019 29
Brückenkurs Hello World!Slide 30
Zusammenfassung
• Vorsicht bei Typkonvertierungen
• Hardware-nahe und speichereffiziente Programmierung durch Pointer
möglich
• Vorsicht bei direkten Speicherzugriffen
10.10.2019 Variablen 30
Brückenkurs Hello World!Slide 31
Übung
1. Füge eine Variablen-Deklaration, Wertezuweisung und Ausgabe im
HelloWorld-Programm ein.2. Definiere ein Rechteck mit Breite breite und Länge laenge, berechne
den Flächeninhalt und Umfang, gebe beides aus. Nutze einmal Variablen vom Typ int und einmal vom Typ float.
3. Und nochmal für einen Kreis!
4. Was passiert bei unzulässigen Variablen-Namen?
5. Was passiert bei der Zuweisungen zwischen unterschiedlichen
Datentypen?int → float; float → int;
char → float, int → bool
6. Was passiert bei arithmetischen Operationen, an denen
unterschiedliche Datentypen beteiligt sind?
10.10.2019 Variablen 31