# 1.1 Datentypen und Variablen

Quelle: https://inf.zone/lectures/1-c/short-1-1-datentypen/

## Video

[Video ansehen](https://oc.streams.uni-bamberg.de/paella7/ui/watch.html?id=9dfb828f-6172-4bf0-9e07-084a2e57f251)

### Alternativen

- [Video auf YouTube](https://youtu.be/2sy9uQ2U-a0)
- Download (1080p) (demnächst)
- Download (720p) (demnächst)
- Download (540p) (demnächst)

## Hinweise zu diesem Video

**Korrekturen**

Die Korrekturen betreffen das Video. In den Folien zum Herunterladen sind sie eingearbeitet, soweit sie die Folien betreffen.

- Folie 11: Im letzten Satz steht „wenn Sie den Typ bool nutzen möchten“. Richtig ist: wenn Sie den Typ string nutzen möchten.
- Folie 20: Das Programm beginnt mit „void main()“. Richtig ist „int main(void)“; mit void als Rückgabetyp bricht der Compiler in unserer Umgebung mit einem Fehler ab.

**Einordnung**

- Die Extra-Minuten zeigen das Problem der Ganzzahldivision (`float result = 3 / 4;` ergibt 0) und nennen den Grundsatz, dass ein Operand eine Fließkommazahl sein muss, zeigen aber nicht, wie das geht: mit einem Cast wie `(float) x / y` oder, bei Zahlen im Quelltext, mit `3.0 / 4`. Das ist Basis-Code und steht in den [Notes 1](https://inf.zone/lectures/1-c/notes1/#ganzzahldivision-nachkommastellen-werden-abgeschnitten).

## Material

- [Folien](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf)
- Folien und Transkript: unten auf dieser Seite

## Folien und Transkript

*Folientext aus den PDF-Folien, darunter jeweils der gesprochene Text des Videos. Der gesprochene Text ist maschinell transkribiert und nachkorrigiert, kann aber noch Fehler enthalten; im Video sprechen abwechselnd Prof und eine AI-Figur, die Sprecherwechsel sind nicht markiert. Die Zuordnung zu den Folien ist ungefähr. Die Zeitangaben verlinken auf die Stelle im Video (YouTube). Maßgeblich sind Video und Folien.*

### Folie 1 — Datentypen und Variablen

[Folie 1 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=1)

#### Transkript

**[Video 00:00–00:31](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=0)**

Dies ist Inf-Einf-B.

### Folie 2

[Folie 2 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=2)

In der Informatik ist eine Variable ein Speicherplatz mit einem zugehörigen symbolischen Namen, der eine bekannte oder unbekannte Menge an Informationen enthält, die als Wert bezeichnet werden.

#### Transkript

**[Video 00:00–00:31](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=0)**

Heute Datentypen und Variablen. In der Informatik ist eine Variable ein Speicherplatz mit einem zugehörigen symbolischen Namen, der eine bekannte oder unbekannte Menge an Informationen enthält, die als Wert bezeichnet werden. Moment mal, wollen wir wirklich so formal einsteigen? Warum denn nicht?

### Folie 3

[Folie 3 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=3)

Im Unterschied zu einer Reihe modernerer Sprachen erfordert C, dass Sie den Datentyp jeder von Ihnen erstellten Variable bei der ersten Verwendung dieser Variable angeben.

Wir sehen uns nun die wichtigsten Datentypen an, die es in C gibt. Darüber hinaus zeigen wir zwei Datentypen, die wir Ihnen zusätzlich in Inf-Einf-B zur Verfügung stellen.

#### Transkript

**[Video 00:00–00:31](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=0)**

Das ist die Definition aus dem Lehrbuch. Sie ist präzise, umfassend und sehr prägnant. So muss das sein. Ja schon, aber

**[Video 00:31–00:59](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=31)**

Wir sollten es vielleicht ein bisschen verständlicher machen. Zum Beispiel stellen Sie sich eine Variable wie eine beschriftete Schachtel vor, in der Sie Dinge aufbewahren können. Aber das ist doch überhaupt keine gute Analogie. Variablen sehen doch gar nicht aus wie Schachteln. Ich bitte dich. Im Unterschied zu einer Reihe modernerer Sprachen erfordert C, dass Sie den Datentyp jeder von Ihnen erstellten Variable bei der ersten Verwendung dieser Variable angeben. Wir sehen uns nun die wichtigsten Datentypen an, die es in C gibt.

**[Video 00:59–01:33](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=59)**

Darüber hinaus zeigen wir zwei Datentypen, die wir Ihnen zusätzlich in diesem Kurs zur Verfügung stellen. Sag mal, wenn du einfach nur den Text vorliest, fragen sich die Studierenden vielleicht, warum sie sich das Video überhaupt anschauen sollen. Außerdem ist es eh kein guter Vortragsstil, einfach nur von den Folien abzulesen. Das ist ziemlich monoton und langweilig. Ich bin für die korrekte Wiedergabe der Inhalte zuständig, nicht für Anekdoten und Unterhaltung. Das ist dein Job. Okay, dann unterbreche ich dich aber immer, wenn ich das Gefühl habe, dass ein Beispiel gut wäre. Und ich markiere nebenbei die wichtigsten Begriffe in den Folien.

### Folie 4

[Folie 4 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=4)

```text
int
```

Der Datentyp int (Integer) wird für Variablen verwendet, die positive oder negative Ganzzahlen enthalten.

–2³¹ bis 2³¹ –1

Variablen dieses Typs belegen 4 Byte Speicher (32 Bit). Ein int kann also nur die Zahlen speichern, die sich mit 32 Bit darstellen lassen.

```text
unsigned int
```

unsigned ist ein Modifier, der auf bestimmte Typen (etwa int) angewendet werden kann, wodurch der positive Wertebereich von Variablen dieses Typs effektiv verdoppelt wird, allerdings auf Kosten der Nichtzulassung von negativen Werten.

0 bis 2³² –1

Ganzzahlen gibt es in C in 5 Größen: char, short, int, long und long long.

#### Transkript

**[Video 00:59–01:33](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=59)**

Int

**[Video 01:33–02:05](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=93)**

Der Datentyp int, das kommt vom Wort Integer, wird für Variablen verwendet, die positive oder negative Ganzzahlen enthalten. Variablen dieses Typs belegen vier Byte Speicher, also 32 Bit. Ein int kann also nur die Zahlen speichern, die sich mit 32 Bit darstellen lassen. Unsigned ist ein sogenannter Modifier, der auf bestimmte Typen, etwa int, angewendet werden kann, wodurch der positive Wertebereich von Variablen dieses Typs effektiv verdoppelt wird. Allerdings auf Kosten der Nichtzulassung von negativen Werten. Ganzzahlen gibt es in

**[Video 02:05–02:36](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=125)**

C in fünf Größen: char, short, int, long und long long. Wart mal, das wird jetzt zu viel. Konzentrieren wir uns vielleicht erst mal auf int. Die anderen können wir dann immer noch bei Bedarf einführen.

### Folie 5 — Der Datentyp char wird für Variablen verwendet, die einzelne Zeichen speichern.

[Folie 5 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=5)

```text
char
```

–128 bis +127

Zeichen belegen in C 1 Byte Speicherplatz (8 Bits). Das bedeutet, dass der Wertebereich, den sie speichern können, auf Informationen im Wert von 8 Bits beschränkt ist.

Im ASCII-Standard wurde festgelegt, mit welchem Wert im positiven Wertebereich Zeichen wie A, B, C kodiert werden.

#### Transkript

**[Video 02:05–02:36](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=125)**

Aber ein breites Wissen ist von entscheidender Bedeutung. Wir sind doch an einer Universität. Ja schon, aber wir dürfen Ihre Aufnahmefähigkeit ja trotzdem nicht überfordern. Char. Der Datentyp Char wird für Variablen verwendet, die einzelne Zeichen speichern. Zeichen belegen immer ein Byte Speicherplatz, also acht Bits.

**[Video 02:36–03:05](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=156)**

Das bedeutet, dass der Wertebereich, den Sie speichern können, auf Informationen im Wert von acht Bits beschränkt ist. Im ASCII-Standard wurde festgelegt, mit welchem Wert im positiven Wertebereich Zeichen wie A, B, C usw. codiert werden.

### Folie 6

[Folie 6 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=6)

```text
float
```

Der Datentyp float wird verwendet, um reelle Zahlen („Kommazahlen“) zu speichern. Der Datentyp heißt float, weil er Zahlen als floating point values (Gleitkommawerte) speichert.

Floats belegen 4 Byte Speicher (32 Bit).

Der Wertebereich von floats ist nicht so einfach abzulesen wie bei einem int. Mit floats lassen sich größere Zahlen darstellen:

–340282346638528859811704183484516925440 bis +340282346638528859811704183484516925440

Allerdings lassen sich nicht alle Zahlen im Wertebereich präzise speichern. Dafür können wir in floats auch sehr kleine Zahlen bis hinunter zu 1.4013e–45 ablegen.

#### Transkript

**[Video 02:36–03:05](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=156)**

Float. Der Datentyp Float wird verwendet, um reelle Zahlen, also Komma-Zahlen, zu speichern. Der Datentyp heißt Float, weil er Zahlen als sogenannte Floating-Point-Values, auf Deutsch sagt man dazu Gleitkomma-Werte, speichert. Was Gleitkomma-Werte sind und wie sie gespeichert werden,

**[Video 03:05–03:34](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=185)**

werden wir in diesem Kurs nicht genauer behandeln. Floats belegen vier Byte Speicher, also genauso viel wie ein int. Der Wertebereich von Floats ist aber nicht so einfach abzulesen wie bei einem int, obwohl Floats genau so viel Platz benötigen wie int-Werte, lassen sich damit größere Zahlen darstellen. Allerdings lassen sich nicht alle Zahlen im Wertebereich präzise speichern. Dafür können wir in Floats aber auch sehr kleine Zahlen bis hinunter zu 1,4 mal 10 hoch minus 45 ablegen.

### Folie 7 — Anstelle von float kann auch der Datentyp double verwendet werden.

[Folie 7 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=7)

```text
double
```

Doubles benötigen 8 Byte Speicherplatz (64 Bit).

Durch die zusätzlichen 32 Bits können doubles Zahlen viel genauer speichern als floats und es lassen sich noch größere Zahlen darstellen.

Die größte darstellbare Zahl ist

1797693134862315708145274237317043567980705 6752584499659891747680315726078002853876058 9558632766878171540458953514382464234321326 8894641827684675467035375169860499105765512 8207624549009038932894407586850845513394230 4583236903222948165808559332123348274797826 2041447231687381771809192998812504040261841 24858368

#### Transkript

**[Video 03:05–03:34](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=185)**

Double.

**[Video 03:34–04:04](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=214)**

Anstelle von Float kann auch der Datentyp Double verwendet werden. Was ist der Unterschied? Doubles benötigen acht Byte Speicherplatz, also doppelt so viel wie Floats. Durch die zusätzlichen 32 Bits können Zahlen damit viel genauer gespeichert werden als mit Floats und es lassen sich noch größere Zahlen darstellen. Vielleicht aber da noch ein wichtiger Hinweis: Bei Floats ist es nicht möglich, einzelne Werte präzise miteinander zu vergleichen. Ja, es ist eben nicht so, dass 0,1 plus 0,2 ganz genau 0,3 ist.

**[Video 04:04–04:35](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=244)**

Ja, man sollte also nicht auf die Idee kommen, solche Zahlen für genaue Berechnungen zu verwenden, weil man spätestens, wenn man die vergleicht, dabei nicht das gewünschte oder nicht das erwartete Ergebnis sehen wird.

### Folie 8 — void ist ein Typ, aber kein Datentyp, den eine Variable haben kann.

[Folie 8 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=8)

```text
void
```

Funktionen können einen Rückgabetyp void haben, was bedeutet, dass sie keinen Wert zurückgeben.

Die Parameterliste einer Funktion kann auch void sein. Das bedeutet einfach, dass die Funktion keine Parameter entgegennimmt.

Betrachten Sie void vorerst wie einen Platzhalter für „nichts“. Tatsächlich ist es etwas komplexer, aber vorerst reicht diese Vereinfachung aus.

#### Transkript

**[Video 04:04–04:35](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=244)**

Ja, freilich, stimmt. Das sind wichtige Hinweise. Bedauerlicherweise ist dafür kein Platz mehr auf der Folie. Tja, da kann man nichts machen. Aber immerhin hat sich jetzt wenigstens das Ansehen des Videos gelohnt. Jetzt aber weiter. Void. Void ist ein Typ, aber kein Datentyp, den eine Variable haben kann.

**[Video 04:35–05:07](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=275)**

Funktionen können einen Rückgabetyp void haben, was bedeutet, dass sie keinen Wert zurückgeben. Die Parameterliste einer Funktion kann auch void sein. Das bedeutet einfach, dass die Funktion keine Parameter entgegennimmt. Betrachten Sie void vorerst wie einen Platzhalter für nichts. Tatsächlich ist es etwas komplexer, aber vorerst reicht diese Vereinfachung aus.

### Folie 9 — Das waren die fünf grundlegenden Typen, denen Sie in C begegnen werden.

[Folie 9 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=9)

In Inf-Einf-B stellen wir Ihnen außerdem zwei weitere Typen zur Verfügung, die Ihnen den Einstieg erleichtern.

#### Transkript

**[Video 04:35–05:07](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=275)**

Das waren die fünf grundlegenden Typen, denen Sie in C begegnen werden. In unserem Kurs stellen wir Ihnen außerdem zwei weitere Typen zur Verfügung, die Ihnen den Einstieg erleichtern.

### Folie 10

[Folie 10 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=10)

```text
bool
```

Der Datentyp bool wird für Variablen verwendet, die einen booleschen Wert speichern sollen. Genauer gesagt, können diese Variablen nur einen von zwei Werten speichern: true und false.

Stellen Sie sicher, dass Sie

```c
#include <cs50.h>
```

in Ihren Programmen verwenden, wenn Sie den Typ bool nutzen möchten.

#### Transkript

**[Video 05:07–05:33](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=307)**

Erstens Bool. Der Datentyp Bool wird für Variablen verwendet, die einen boolschen Wert speichern sollen. Genauer gesagt können diese Variablen nur einen von zwei Werten speichern: true, also wahr, und false, also falsch. Stellen Sie sicher, dass Sie die Headerdatei cs50.h in Ihren Programmen verwenden, wenn Sie den Typ Bool nutzen möchten.

### Folie 11

[Folie 11 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=11)

```text
string
```

Der Datentyp string kann für Variablen verwendet werden, die Zeichenketten speichern. Zeichenketten enthalten einen oder mehrere Buchstaben, Wörter, Sätze, Absätze und dergleichen.

Stellen Sie sicher, dass Sie

```c
#include <cs50.h>
```

in Ihren Programmen verwenden, wenn Sie den Typ string nutzen möchten.

#### Transkript

**[Video 05:07–05:33](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=307)**

Der zweite Datentyp ist String.

**[Video 05:33–06:07](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=333)**

Der Datentyp String kann für solche Variablen verwendet werden, die Zeichenketten speichern. Zeichenketten enthalten einen oder mehrere Buchstaben, Wörter, Sätze, Absätze und dergleichen. Auch hier gilt: String ist nur verfügbar, wenn Sie die Headerdatei cs50.h in Ihren Programmen verwenden.

### Folie 12

[Folie 12 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=12)

Im weiteren Verlauf des Kurses werden wir auch Strukturen (struct) und definierte Typen (typedef) kennenlernen. Diese geben Ihnen mehr Flexibilität, um neue Datentypen zu erstellen, die Sie in manchen Programmen benötigen.

Nun sehen wir uns noch an, wie man Variablen erzeugt und manipuliert.

#### Transkript

**[Video 05:33–06:07](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=333)**

Im weiteren Verlauf des Kurses werden wir auch Strukturen, sogenannte structs, und definierte Typen, Typedefs, kennenlernen. Diese geben Ihnen mehr Flexibilität, um neue Datentypen zu erstellen, die Sie in manchen Programmen benötigen. Nun sehen wir uns noch an, wie man Variablen erzeugt und manipuliert.

### Folie 13 — Anlegen

[Folie 13 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=13)

Um eine Variable anzulegen, müssen Sie lediglich den Datentyp der Variablen angeben und ihr einen Namen geben:

einer Variable

```text
int number;  // Deklaration
char letter; // declaration
```

Wenn Sie mehrere Variablen desselben Typs erstellen möchten, geben Sie den Namen des Typs einmal an und listen dann so viele Variablen dieses Typs auf, wie Sie möchten:

```text
int height, width;
float sqrt2, sqrt3, pi;
```

Es ist eine gute Praxis, Variablen erst an der Stelle zu deklarieren, ab der man sie braucht.

#### Transkript

**[Video 05:33–06:07](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=333)**

Anlegen einer Variablen

**[Video 06:07–06:37](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=367)**

Um eine Variable anzulegen, müssen Sie lediglich den Datentyp der Variablen angeben und ihr einen Namen geben, zum Beispiel int number und char letter. Wenn Sie mehrere Variablen desselben Typs erstellen möchten, geben Sie den Namen des Typs einmal an und listen dann so viele Variablen dieses Typs auf, wie Sie möchten. Es ist eine gute Praxis, Variablen erst an der Stelle zu deklarieren, ab der man sie braucht.

### Folie 14 — Verwenden von Variablen

[Folie 14 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=14)

Nachdem eine Variable deklariert wurde, wird der Typ nicht mehr angegeben.

```text
int number;  // Deklaration
number = 17;  // Zuweisung
char letter;  // declaration
letter = 'H'; // assignment
```

Sie können eine Variable gleichzeitig deklarieren und ihr einen Wert zuweisen. Dies wird auch als Initialisieren bezeichnet.

```text
int number = 17;  // Initialisierung
char letter = 'H'; // initialization
```

#### Transkript

**[Video 06:07–06:37](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=367)**

Verwenden von Variablen Nachdem eine Variable deklariert wurde, wird der Typ nicht mehr angegeben.

**[Video 06:37–07:11](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=397)**

Das Beispiel zeigt die Deklaration und die Zuweisung, die man im Englischen Assignment nennt. Sie können eine Variable auch gleichzeitig deklarieren und ihr einen Wert zuweisen. Dies wird auch als Initialisieren bezeichnet.

### Folie 15 — Damit schließen wir die Behandlung von Datentypen und Variablen ab.

[Folie 15 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=15)

Bis bald!

#### Transkript

**[Video 06:37–07:11](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=397)**

Hast du eigentlich bemerkt, dass ich an einigen Stellen jetzt nicht einfach nur den Text vorgelesen habe? Toll, oder? Damit schließen wir die Behandlung von Datentypen und Variablen ab. Bis bald. Halt! Wir sollten noch einmal zusammenfassen und Ihnen ermöglichen zu überprüfen, ob Sie alles überhaupt auch verstanden haben. Die verfügbare Zeit ist erschöpft.

**[Video 07:11–07:44](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=431)**

Moment, so funktioniert das hier nicht. Wir wollen doch, dass die Studierenden was lernen. Da müssen wir flexibel sein. Studien haben gezeigt, dass lange Lernvideos nicht so wirksam sind wie kurze. Ja, weiß ich. Aber trotzdem müssen wir das irgendwie anders machen. Folgender Vorschlag: Wir hängen an unsere Videos immer am Ende einen kurzen Extrablock an.

### Folie 16

[Folie 16 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=16)

E X T R A S I N 3 M I N U T E N FRAGEN – ANTWORTEN – RÄTSEL UND KURZE ZUSAMMENFASSUNG

#### Transkript

**[Video 07:11–07:44](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=431)**

Nennen wir ihn zum Beispiel die drei Extraminuten. Da klären wir typische Fragen und fassen einfach zusammen, was in dem Video passiert ist. Dann bleibt der Hauptinhalt schön kurz und die eigentlichen Informationen kommen zum Schluss noch mal zusammengefasst. Moment, lass mich das mal kurz vorbereiten.

**[Video 07:44–08:11](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=464)**

Extras in drei Minuten. Jetzt bin ich gespannt.

### Folie 17

[Folie 17 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=17)

F1:

Warum müssen wir unterschiedliche Größen für Ganzzahlen und Gleitkommazahlen verwenden? Warum sollte ich float nehmen, wenn es auch double gibt?

A1: Kleinere Typen wie float brauchen weniger

Speicher als double, und der Computer kann damit oft schneller rechnen.

#### Transkript

**[Video 07:44–08:11](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=464)**

Was für eine Frage könnte man denn nun haben? Überleg du dir doch mal eine Frage. Ich beantworte sie dann. Okay. Hier kommt eine Frage. Warum müssen wir unterschiedliche Größen für Ganzzahlen und Gleitkomma-Zahlen verwenden? Warum sollte ich Float nehmen, wenn es auch Double gibt? Das ist eine gute Frage. Die Antwort ist ganz einfach, weil Computer mit den kleineren Typen, also mit Floats, einfach schneller und speichersparender rechnen können.

**[Video 08:11–08:36](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=491)**

So, jetzt habe ich noch eine Frage.

### Folie 18

[Folie 18 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=18)

F2: Wie kann man in einem char Zahlen und

Buchstaben gleichzeitig speichern?

A2:

Ein char ist im Grunde eine 8-Bit-Ganzzahl, die Werte von –128 bis 127 speichern kann.

Die positiven Zahlen sind gemäß der ASCIIKodierung mit Zeichen verbunden. So steht beispielsweise die Zahl 65 für das Zeichen „A“, 97 für „a“ usw.

Wenn Sie einer char-Variablen ein Zeichen zuweisen, verwenden Sie einfache Anführungszeichen:

```text
char letter = 'A';
```

Der Computer speichert in letter dann die Zahl 65, aber wenn Sie die Variable als char ausgeben lassen, sehen Sie ein „A“.

#### Transkript

**[Video 08:11–08:36](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=491)**

Mich verwirrt char. Wie kann man darin Zahlen und Buchstaben gleichzeitig speichern? Moment, also ein char ist im Grunde eine 8-Bit-Ganzzahl, die Werte von minus 128 bis plus 127 speichern kann. Die positiven Zahlen sind gemäß der ASCII-Kodierung mit bestimmten Zeichen verbunden. So steht beispielsweise die Zahl 65 für das Zeichen Groß A.

**[Video 08:36–09:04](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=516)**

97 für klein a und so weiter. Wenn Sie einer char-Variablen ein Zeichen zuweisen, verwenden Sie einfache Anführungszeichen. Der Computer speichert in letter dann die Zahl 65, aber wenn Sie die Variable als char ausgeben lassen, sehen Sie ein A. Wir könnten Ihnen noch ein paar Fragen auf den Weg mitgeben, die Sie durch Ausprobieren selber beantworten können.

### Folie 19

[Folie 19 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=19)

F3:

Was passiert, wenn ich einem unsigned int eine negative Zahl zuweise?

F4:

Was passiert, wenn ich einen float einem int zuweise?

F5:

Was passiert, wenn ich versuche, eine Zahl zu speichern, die zu groß für einen int ist?“

F6:

Was passiert, wenn ich eine char-Variable verwende, um eine Zahl außerhalb des ASCII-Bereichs zu speichern?

#### Transkript

**[Video 08:36–09:04](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=516)**

Gute Idee. Erstens, was passiert, wenn ich einem unsigned int eine negative Zahl zuweise?

**[Video 09:04–09:33](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=544)**

Zweitens: Was passiert, wenn ich einen Float einem Int zuweise? Drittens: Was ist, wenn ich versuche, eine Zahl zu speichern, die zu groß für einen Int ist? Viertens: Was passiert, wenn ich eine Char-Variable verwende, um eine Zahl außerhalb des ASCII-Bereichs zu speichern? Das sollte erst einmal reichen.

### Folie 20 — Rätselhafter Fehler

[Folie 20 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=20)

Rätselhafter Fehler

Nehmen wir an, dein Programm sieht so aus:

```c
#include <stdio.h>
int main(void) {
    float result = 3 / 4;
    printf("3 / 4 = %f\n", result);
    // %f wird durch den Wert von
    // result ersetzt und als
    // Kommazahl ausgegeben
}
```

Warum rechnet es falsch?

Um das zu verstehen, muss man wissen, wie C mit Literalen umgeht.

#### Transkript

**[Video 09:04–09:33](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=544)**

Ah, das bringt mich auf eine gute Rätselfrage. Ich habe in einem Programm drei durch vier geteilt und das Ergebnis in einem Float gespeichert. Das Ergebnis ist aber null.

**[Video 09:33–10:00](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=573)**

Wie kann das sein? Reicht die Genauigkeit von einem Float dafür nicht aus? Brauche ich etwa einen Double? Das ist ein typischer Anfängerfehler. Vermutlich sieht dein Programm so oder so ähnlich aus. Das Prozent f bei printf wird durch den Wert von result ersetzt. Result wird dadurch als Kommazahl ausgegeben. Warum rechnet es falsch? Um das zu verstehen, muss man wissen, wie C mit Literalen umgeht. Haben wir dafür noch Zeit?

### Folie 21 — Literale

[Folie 21 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=21)

Literale sind konstante Werte, die direkt in den Quellcode geschrieben werden:

in C

Ganzzahlige Literale: 42, 0, –17

Fließkomma-Literale: 3.14, –0.01, 2.0e–3

Zeichenliterale: 'A', '7', '\\n'

Stringliterale: "Hallo, Welt!", ""

Ganzzahlige Literale werden standardmäßig als int behandelt. Wenn alle Operanden Ganzzahlen sind, führt C bei der Durchführung von Operationen Ganzzahlarithmetik aus.

#### Transkript

**[Video 09:33–10:00](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=573)**

Ja, das schaffen wir. Literale in C.

**[Video 10:00–10:30](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=600)**

Literale sind konstante Werte, die direkt in den Quellcode geschrieben werden. Es gibt ganzzahlige Literale, Fließkomma-Literale, Zeichenliterale und String-Literale. Wichtig nun sind zwei Dinge: Erstens, Ganzzahl-Literale werden standardmäßig als int behandelt. Zweitens, wenn alle Operanden Ganzzahlen sind, führt C bei der Durchführung von Operationen Ganzzahl-Arithmetik aus. Ein wichtiger Punkt fehlt aber noch auf der Folie.

### Folie 22 — Variablen haben einen

[Folie 22 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=22)

Datentyp, der explizit angegeben werden muss.

Variablen erst bei Bedarf deklarieren, uninitialisierte

Man sagt auch: C ist „statisch typisiert“.

Variablen nicht auslesen.

ZUSAMMENFASSUNG

Wichtige Typen sind int, char, float und double.

Inf-Einf-B fügt hinzu:

bool und string

Auch Literale sind typisiert:

Typen haben unterschiedliche Zahlenbereiche und

Ganzzahlen (42), Gleitkomma-Zahlen (3.14), Zeichen ('A'), String ("Hallo").

Genauigkeit.

Achtung: Ganzzahl-Literale

werden als int behandelt.

> Bildinhalte sind nicht transkribiert; siehe Originalfolie.

#### Transkript

*Kein Transkriptabschnitt eindeutig dieser Folie zugeordnet. Möglicherweise eine Aufbau-/Grafikfolie oder eine Abweichung zwischen PDF und Video.*

### Folie 23

[Folie 23 als PDF](https://inf.zone/download/lectures/1-c/1.1-data_types.pdf#page=23)

F6: Werte von -128 bis -1 werden gespeichert, entsprechen jedoch nicht den StandardASCII-Zeichen. Wenn diese als Zeichen gedruckt werden, erscheinen Sonderzeichen. Welches Zeichen gedruckt wird hängt von der konfigurierten Zeichencodierung des Systems ab. Beispiel: char x = 200; könnte beispielsweise als „È“ ausgegeben werden.

AUFLÖSUNG ZU F3–F6

F5: Dies wird als Integer-Überlauf (integer overflow) bezeichnet. Das Verhalten ist in C undefiniert, was bedeutet, dass es zu unvorhersehbaren Ergebnissen führen kann. Normalerweise wird die Zahl zu einer negativen Zahl oder einer kleineren positiven Zahl ("wrap around"). Wenn Sie z. B. 1 zur größtmöglichen int-Zahl addieren, erhalten Sie möglicherweise die kleinstmögliche int-Zahl.

F4: Der Dezimalteil wird abgeschnitten (nicht gerundet). Beispiel: int x = 3.7; der Wert von x ist dann 3. Dies kann zu einem Verlust an Genauigkeit führen, seien Sie also vorsichtig. Der Compiler gibt möglicherweise eine Warnung zu dieser Umwandlung aus.

F3: Der Compiler könnte Sie warnen, aber es wird trotzdem kompiliert. Die negative Zahl wird in eine große positive Zahl umgewandelt. Dies geschieht, weil die binäre Darstellung der negativen Zahl als positive Zahl interpretiert wird. Wenn Sie z. B. -1 einer vorzeichenlosen int-Zahl zuweisen, erhalten Sie den maximalen Wert, den die vorzeichenlose int-Zahl enthalten kann (normalerweise 4.294.967.295).

> Bildinhalte sind nicht transkribiert; siehe Originalfolie.

#### Transkript

> Zuordnung unsicher: wenige gemeinsame Textmerkmale; anhand der benachbarten Folien eingeordnet.

**[Video 10:00–10:30](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=600)**

Damit man Fließkomma-Arithmetik erzwingen kann, muss mindestens ein Operand eine Fließkomma-Zahl sein.

**[Video 10:30–10:55](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=630)**

Damit sollte es nicht mehr allzu schwierig sein, das Problem mit der Division zu beseitigen. Schau mal, das waren jetzt ziemlich genau drei Minuten. Jetzt bin ich aber schwer beeindruckt. Wahnsinn! Wie konntest du das denn vorhin so genau abschätzen? Toll, oder?

**[Video 10:55–11:06](https://www.youtube.com/watch?v=2sy9uQ2U-a0&t=655)**

Dies war Inf-Einf-B.
