C++
VeröffentlichtRevision 1

Datentypen, Wertebereiche und Genauigkeit

C++ ist statisch typisiert: Typen werden grundsätzlich bei der Übersetzung bestimmt. Eine Variable wechselt nicht während der Ausführung beliebig von einer Zahl zu einem Text.

Datentypen, Wertebereiche und Genauigkeit#

Werte und Ausdrücke · Lektion 13 von 60

Voraussetzungen: Variablen. Lernziel: Du wählst einen passenden Typ und kennst seine Grenzen.

C++ ist statisch typisiert: Typen werden grundsätzlich bei der Übersetzung bestimmt. Eine Variable wechselt nicht während der Ausführung beliebig von einer Zahl zu einem Text.

Typ

Zweck

Beispiel

bool

Wahrheitswert

true oder false

char

Einzelne schmale Codeeinheit

'A'

int

Ganze Zahl

42

long long

Ganze Zahl mit mindestens 64 Bit Breite

42LL

double

Gleitkommazahl

3.5

std::string

Veränderbarer Text

"Hallo"

Ein Bit ist eine binäre Stelle mit zwei möglichen Zuständen. Ein C++-Byte ist die Speichereinheit der Größe eines char und umfasst mindestens acht Bits. Auf üblichen Desktopplattformen sind es acht. sizeof(T) liefert die Typgröße in C++-Bytes.

C++
1#include <iostream>2#include <limits>3 4int main() {5    std::cout << "int in Bytes: " << sizeof(int) << '\n';6    std::cout << "Minimum: " << std::numeric_limits<int>::lowest() << '\n';7    std::cout << "Maximum: " << std::numeric_limits<int>::max() << '\n';8}

Das Ergebnis hängt von der Implementierung ab. int ist mindestens 16 Bit breit, auf vielen heutigen Systemen 32 Bit. Gehe nicht davon aus, dass jeder int vier Bytes hat. <cstdint> stellt Typen wie std::int32_t bereit, wenn ein exakt 32 Bit breiter Ganzzahltyp unterstützt wird.

Mit und ohne Vorzeichen#

Signed bedeutet mit Vorzeichen; der Typ kann negative Werte darstellen. Unsigned bedeutet ohne Vorzeichen. Das macht unsigned int nicht automatisch zur besten Wahl für jede Anzahl.

Bei vorzeichenbehafteter Ganzzahlarithmetik ist ein Ergebnis außerhalb des darstellbaren Bereichs in C++17 undefiniertes Verhalten. Vorzeichenlose Rechnung läuft dagegen modulo der Bereichsgröße um. Modulo beschreibt hier den Rest nach Division durch diese Größe. Auch dieses definierte Umlaufen kann einen Programmfehler bedeuten. Prüfe Grenzen vor der Rechnung.

Gleitkomma ist eine Näherung#

Gleitkomma speichert Zahlen mit begrenzter Genauigkeit über eine Mantisse und einen Exponenten. Die Mantisse enthält die wesentlichen Ziffern, der Exponent die Größenordnung. Viele Dezimalbrüche wie 0,1 sind im üblichen binären Format nicht exakt darstellbar. double bedeutet nicht „beliebig genaue Kommazahl“.

Für Geld kann eine begrenzte Ganzzahl in Cent sinnvoll sein. Für Messwerte ist double häufig passend. Auch ein pauschaler Toleranzwert für alle Gleitkommavergleiche ist falsch: Die erlaubte Abweichung muss zur Größenordnung und Aufgabe passen.

Übung#

Welcher Typ passt zu „Tür offen?“, „Name“ und „Temperatur“?

Lösung

bool, std::string und häufig double. Die Wahl beschreibt das Fachproblem, nicht nur die gerade beobachtete Beispielzahl.

Weiterlernen#

Zurück: Variablen, Initialisierung und Zuweisung · Kursübersicht · Weiter: const, constexpr und auto

Mitwirkende 1

Menschen, deren Änderungen in dieser Seite veröffentlicht wurden.

Kommentare 0

Kommentare sind für diese Seite deaktiviert.