Basisdatentypen Flashcards
Was ist ein Byte?
8 Bit
Was ist eine Speicheradresse?
Die Byte-Position von einer Zahl im Speicher
Wie ist der Speicher eingeteilt?
Der Speicher besteht aus Byte-Blöcken.
Was ist die kleinste Anzahl an Bit, auf die im Speicher separat zugegriffen werden kann.
Ein Byte.
Was ist eine Variable?
Eine Variable ist ein Adresse im Hauptspeicher, an der Sie einen Wert ablegen können, um gegebenenfalls später wieder darauf zurückzugreifen. Neben einer Adresse hat eine Variable auch einen Namen, genauer gesagt einen Bezeichner, mit dem man auf den Wert der Variable zugreifen kann.
Was ist ein Variablentyp?
Ein Variablentyp besagt, wie die Bits einer Variable strukturiert sind.
Was sind Operanden?
Wenn man mit Variablen rechnet, dann nennt man die Variablen Operanden.
Was sind Operatoren?
Wenn man eine Rechenoperation ausführt wird die Rechenoperation selbst als Operator bezeichnet.
Was ist ein Parameter?
Wenn man in C Funktionen definiert, kann man dieser Funktion Variablen und Zahlen, oder auch Argumente, übergeben, die die Funktion nutzen kann. Diese Argumente werden Parameter gennant.
Was ist eine Deklaration einer Variable?
Die Deklaration einer Variablen informiert den Compiler über den Typ und den Namen der Variablen, ohne ihr Speicherplatz zu reservieren oder ihren Wert zu initialisieren. es ist im Wesentlichen eine Ankündigung, dass eine Variable dieses Namens und Typs verwendet wird.
Was ist die Definition einer Variable?
Die Definition einer Variablen reserviert Speicherplatz für die Variable und kann auch einen Anfangswert zuweisen.
Welche Speicheradresse hat eine Variable?
Welche Speicheradresse eine Variable bekommt kann nicht beeinflusst werden und ändert sich auch bei jedem Aufrufen des Programms.
Was ist die Variablentabelle?
Der Compiler nutzt die Variablentabelle um Informationen über die Variablen zu Speichen und zu organisieren. Z.B.: Bezeichner, Speicherplatz, Typ, Speicheradresse, Gültigkeitsbereich etc.
Variablenverwendung ohne Wertzuweisung.
In C wird der vorherige Inhalt der Speicheradresse, die einer Variable zugewiesen wird nicht mit einem Standardwert überschrieben. Daher befindet sich vor der ersten Wertzuweisung einer Variable ein zufälliger Wert.
Variablengrößen
Sämtliche Variablengrößen sind ein Vielfaches eines Bytes. Deshalb werden die Variablengrößen auch nicht in Bit sondern in Byte angegeben.
Was ist ein Array
Ein Array ist ein Datenfeld, also eine Feld, in dem mehrere Variablen des selben Typs gespeichert werden können
Array - Definition
Typ Bezeichner[Feldgröße]
kann man bei einem Array die größe nach Definition verändern?
Nein
Wie werden Strings in C gespeichert.
In Arrays, wobei die einzeilnen Zeichen in den einzelnen Feldern des Arrays stehen.
Wie viel Speicher beletgt eine Variable?
Das hängt vom Typ der Variable ab. Jeder Datentyp hat eine Speichergröße, die für den Datentypen fest ist.
Datentyp: int (Integer)
- wird zum Speichern von Ganzzahlen verwendet
- hat nach ANSI C mindestens 2 Byte
- Größe hängt von der Maschine ab
- hat laut Standart die natürliche Größe, die von der Ausführungsumgebung vorgeschlagen wird, und die meistens genau so breit, wie die Wortbreite des Prozessors ist.
- Ausnahme ist 64 Bit-Archiketuren, wo der int nur 32 Bit hat.
Grenzen von Datentypen
Die Grenzen von Datentypen sind in der Headerdatei
~~~
<limits.h>
```
definiert.
</limits.h>
Bezeichner - Namenswahl
Bezeichner sollten andeuten, was in ihnen gespeichert wird
int - Schreibweise
int a; a = 5;
Folgende Schreibweisen sind dabei erlaut:
~~~
int wert = 5;
int wert1 = 10, wert2 = 20;
int wert1, wert 2 = 20;
int wert1;
int wert2 = wert1 = 10;
~~~
länge des Bezeichners
Die Länge des Bezeichners ist beliebig. Nach ASCI-C Standart sind aber nur die ersten 31 Zeichen von Bedeutung.
Datentyp: long
- Ist eine Ganzzahlvariable.
- Ist eine größere Variante des int
- Standartgröße 4 Byte.
- Normale größe sind 8 Byte.
Datentyp: long long
- Noch größer als long
- Standartgröße 8 Byte
Datentyp: short
- eine kleine Variante vom int
- Standartgröße 2 Byte
Wie greife ich auf die Adresse einer Variable zu?
&Bezeichner
gibt die Adresse der Variable zurück
Funktion - printf()
Die printf() Funktion wird verwendet um Text auf die Konsole zu drucken. Dabei wird der String als Parameter mitgegeben. Soll der String Variablen enthalten können diese mit Formatzeichen im String beschrieben werden und werden nach dem String ebenfalls als Paramterer angegeben, in der Reihnfolge, in der sie im String stehen. Dabei haben verschiedene Datentypen verschiedene Formatzeichen.
Funktion - scanf()
Die Funktion scanf() ließt eine Eingabe bis zum nächsten ENTER in Variablen ein. Das erste Argument ist wieder ein String, der die Formatzeichen für die Variablen enthält. Danach folgen die Adressen der Variablen.
positive Ganzzahlenvariablen
Soll eine Ganzzahlvariable nur positive Zahlen enthalten können wird vor den Variablentyp das schlüsselwort unsigned gestellt. Bsp.:
~~~
unsigned int var;
unsigned long var;
~~~
Datentyp: float
- Speicherung von Kommazahlen im Gleitpunktformat
- 4 Byte groß
- 6-stellige Genauigkeit: Kann nur die ersten 6 Zahlen unterscheiden
1234,567 und 1234,568 sind in einem Float nicht unterscheidbar
Datentyp: double
- Speicherung von Kommazahlen im Gleitpunktformat
- meinsten 8 Byte groß (nicht gewährleistet)
- kann garantiert ein float aufnehmen (gewährleistet)
- meist 15-stellige Genauigkeit (nicht gewährleistet)
Datentyp: long double
- Speicherung von Kommazahlen im Gleitpunktformat
- meinsten 10 Byte groß (nicht gewährleistet)
- kann garantiert ein double aufnehmen (gewährleistet)
- meist 19-stellige Genauigkeit (nicht gewährleistet)
Datentyp: long long doulbe
- Speicherung von Kommazahlen im Gleitpunktformat
- meinsten 16 Byte groß (nicht gewährleistet)
- kann zu problemen führen, wenn ein double aufgenommen werden soll
Warum kann es zu Problemen kommen, wenn ein double-Wert in einen long long double geschrieben werden soll?
Die Größe der Mantisse und des Exponenten können je nach Implikation variieren, was leider eventuell zu Imkompatibilität bei der Wandlung von z.B. ein double in long long double führt.
Warum sollte man für Berechnungen keinen float verwenden?
Weil die Genauigkeit zu klein ist.
Wofür wird vor allem der long long double verwendet?
Der long long double wird vor allem auf Graikprozessoren für Spielekonsolen benutzt.
Welchen Datentyp erhalte ich bei einer Operationen mit zwei unterschiedlichen Datentypen?
Man erhält immer den genaueren Datentyp. Gleitpunktypen gelten als genauer als Ganzzahltypen.
Fehlerstelle bei Division mit zwei Ganzzahltypen
Bei der Division von zwei Ganzzahltypen wird der eventuelle Rest, der entsteht einfach weggelassen.
Was ist, wen die Genauigkeit von Gleitkommatypen nicht ausreichen sollte?
Sollte der genauste Gleitkommatyp nicht ausreichen muss man sich nach sogenannten Festkomma-Algorithmen umsehen. Diese gibt es in C jedoch nicht standartmäßig.
Probleme beim Rechnen mit Gleitpunkttypen
Nicht alle Reellen Zahlen können exakt im Gleitpunktformat dargestellt werden. So kann z.B die Zahl 0.1 nie exakt dargestellt werden, da sie im Gleitpunktformat eine periodische Zahl ist. Dazu kommen kleine Fehler, die bei jeder Berechnung passieren können. Daher sollte bei vergleichen mit Gleitkommazahlen immer ein Bereich und nicht eine exakte Zahl angegeben werden.
Komplexe Gleitpunkttypen in C
komplexe Gleitpunttypen sind in der Headerdatei <complex.h> definiert
Datentyp: char
- Kann eine Ganzzahl oder ein ASCII-Zeichen speichern
- 1 Byte groß
- ASCII-Zeichern werden auch nur mit ihrem ASCII-Wert gespeichert
- Zeichern werden zwischen zwei Hochkommata gestellt: ‘A’
- ‘A’ übersetzt a in seinen ASCII-Wert
- “A” ist falsch, das ist für ein String
- für den Computer sind also ‘A’ und 65 identisch
Warum sollte man char nicht zum Rechnen benutzen, wenn es nicht nötig ist?
Weil nicht festgelet ist ob ein char mit oder ohne Vorzeichen interpretiert wird. Das kann eventell zu fehlern führen.
Vorzeichenlose oder Vorzeichenbehaftete Zahl ohne angabe?
Nach dem neusten Standart wird eine Variable nicht explizit mit unsigned deklariert, als signed behandelt, auch beim char.
Datentyp: wchar_t
- Für die Darstellung größerer Zeichensätze kann wchar_t verwendet werden
- ist in der Headerdatei <stddef.h> definiert.
- ist ein integraler Datentyp
- meist 2 oder 4 Byte groß
- mindestens so groß wie char und höhstens so groß wie long
- Bei der Deklaration muss vor den einzelenen Anführungszeichnen noch das Präfix L gestellt werden
wchar_t ch = L'Z';
Multibyte-Zeichen
Mulitbyte-Zeichen sind eine weitere Möglichkeit größere Zeichensätze zu speichern. Sie verwenden jedoch im Gegensatz zu wchar_t keinen speicherplatz indem die ASCII-Zeichen wirklich nur 1 Byte speicher verbrauchen und nicht 2 oder 4 wie bei wchar_t. Die macht es sehr speichereffizient, kann die Arbeit damit aber auch erheblich schwieriger machen. Lohnt sich also nur, wenn fast ausschließlich ASCII-Zeichen verwendet werden.
Boolesche Werte
Boolsche Werte können über die Headerdatei <stdbool.h> eingebunden werden oder durch folgenden Code selbst geschreiben werden:
typedef enum {false,true} bool;
Ob ihnen false für 0 und true für 1 verwendet werden können, kann mit dem Makro: bool_true_false_are_defined überprüft werden.
typedef enum {true,false} bool; ist falsch, da falsch = 0 und true = 1 sein muss, was hier nicht der Fall ist.
Zu große Zahlen in einem Datentyp speichern
Wenn zu große Zahlen in einem Datentyp gespeichert werden redet man von einem Überlaufen. Der Wert wird dann um den maximalen Wert des unsigned Datentyps reduziert.
limits für Ganzzahl
In der Headerdatei <limits.h> sind Makros mit den limits der Ganzzahlen definiert.