Typen in C# (Typen in C#), Lektion, Seite 723252
https://www.purl.org/stefan_ram/pub/typen_csharp (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C#-Kurs

Typen in C♯ 

Numeralia und Zeichenfolgenliterale werden zusammenfassend als Literale  bezeichnet.

Jedes Literal hat einen bestimmten Typ, der festlegt, wie das Literal verwendet werden kann.

Typen von Literalen

Wir haben bisher schon verschiedene Literale, wie »65«, »12.82« oder »"Alpha"« kennengelernt. Diese gehören offensichtlich verschiedenen Typen an: Das erste Literal steht für eine Zahl ohne Nachkommastellen, der zweite für eine Zahl mit Nachkommastellen und der dritte ist gar keine Zahl, sondern ein Text. Tatsächlich ordnet man solchen Literalen in C♯  verschiedene sogenannte Typen zu (die man auch Datentypen  nennt).

»int«

Ein Numerale ohne Punkt ».« aus dem Bereich von 0 bis 2147483647 hat den Typ »int«.

Der Datentyp »int« wird auch als ein ganzzahliger Typ  bezeichnet, da seine Literale ganzzahlig sind, also keine Nachkommastellen haben.

Ein Numerale vom Datentyp »int« ist ein ganzzahliges Numerale.

Man kann Typnamen auch als prädikative Adjektive gebrauchen, obwohl dies nicht besonders schön klingt: „Dieses Literal ist int.“ bedeutet „Dieses Literal hat den Typ »int«.“ Man kann Typnamen auch als Präfixoid gebrauchen: „int -Literal“ bedeutet „Literal mit dem Typ »int«“.

»double«

Ein Numerale mit Punkt ».« hat den Typ »double«.

Dieser Typ ist im allgemeinen der Typ von Literalen mit Nachkommastellen, jedoch wird dieser Typ einem Literal auch dann zugewiesen, wenn das Literal gar keine richtigen Nachkommastellen hat, wie bei »2.0«, da es einfacher ist, das formale Kriterium heranzuziehen, welches am Anfang dieses Abschnitts genannt wurde.

Der Datentyp »double« wird auch als binärer Gleitkommatyp  bezeichnet, da seine Zahlen intern normalerweise in einer sogenannten „binären Gleitkommadarstellung“ abgespeichert werden.

Ein Numerale vom Datentyp »double« ist ein binäres Gleitkommanumerale.

Bei Gleitkommazahlen sind kleine Abweichungen von den Literalwerten in den hinteren Stellen gestattet, wie etwa das folgende Beispiel zeigt.

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( 1.9999999999999999 ); }}
global::System.Console.Out
2

Dies zeigt erneut deutlich den Unterschied zwischen einem Numerale und seinem Wert.

Werte des Typs »double« können größer als Werte des Typs »int« sein, dafür sind sie aber in den hinteren Stelle ungenau.

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( 9223372036854775808.0 ); }}
global::System.Console.Out
9.22337203685478E+18

(Die Ausgabedarstellung »9.22337203685478E+18« bedeutet 9,22337203685478 × 10¹⁸.)

double-Werte sind in den hinteren Stellen manchmal ungenau. Daher sollten sie für prinzipiell ungenaue Werte verwendet werden, wie beispielsweise Meßwerte kontinuierlicher Größen (wie Länge, Geschwindigkeiten oder Temperaturen). Solche Werte können praktisch nie auf mehr als 14 Stellen gemessen werden, so daß es für ihre Speicherung und Verarbeitung akzeptabel ist, wenn ab der 14. Stelle Fehler auftreten.

Für Werte, deren Nachkommastellen alle ganz genau bestimmt sein sollen, wie beispielsweise Währungsbeträge, ist der Datentyp »double« nicht  gedacht. Allerdings könnte man nicht zu große Währungsbeträge mit diesem Datentyp noch darstellen, indem man sie mit 100 multipliziert, um ohne Nachkommastellen auszukommen.

E-Numeralia

In einem Numerale steht »E« für „mal Zehn hoch“. »2E3« bedeutet also beispielsweise ‹ 2 × 10³ ›.

‹ 10³ › bezeichnet den Wert, den man erhält, wenn man die Zahl Eins 3-mal mit 10 multipliziert. Allgemein bezeichnet für eine natürliche Zahl n  der Term ‹ 10  › den Wert, den man erhält, wenn man die Zahl Eins n -mal mit 10 multipliziert.

Dies bedeutet, daß das Dezimalkomma bei »2.0« um drei Schritte nach rechts verschoben werden soll. Man erhält so »2000.0«.

»2E3« bedeutet also nicht  etwa „2³“, also die Zahl, welche man erhält indem man die Zahl Eins dreimal mit der Zahl 2 multipliziert (8).

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( 2E3 ); }}
global::System.Console.Out
2000

Ein solches E-Numerale hat den Datentyp »double«, selbst wenn es keinen  Punkt enthält.

Wir verzichten an dieser Stelle auf eine ausführliche Darstellung der Morphologie von E-Numeralia, da E-Numeralia im weiteren Verlauf dieses Kurses nur selten als Teile des Quelltextes vorkommen. Zahlenwerte werden von Programmen zwar manchmal in der E-Schreibweise ausgegeben, aber um diese zu verstehen, reicht die obenstehende Erklärung bereits aus.

»decimal«

Ein Numerale hat den Typ »decimal«, wenn es mit einem direkt nachfolgendem »m« gekennzeichnet ist.

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( 0.1m ); }}
global::System.Console.Out
0.1

Dieser Typ ist besonders für Zwecke geeignet, bei denen im Alltag vorkommende Zahlen genau gespeichert werden sollen, insbesondere auch für Währungsbeträge. Dies liegt zum einen daran, daß er viele Werte mit einer bestimmten kleinen Anzahl von Nachkommastellen im üblichen Dezimalsystem (wie beispielsweise 2) genau darstellen kann, die bei Verwendung des Typs »double« schon nicht mehr genau dargestellt werden können. Zum anderen kann dieser Typ insgesamt 28 Dezimalstellen korrekt darstellen, so daß auch noch relativ große Beträge korrekt dargestellt werden können (wenn sie nicht zu viele Nachkommastellen haben).

Andererseits benötigen Werte dieses Typs bei gleicher Information mehr Speicherplatz als Werte des Typs »double« und werden meistens langsamer verarbeitet.

Die Werte dieses Typs umfassen – anders als double-Werte – auch die Anzahl der Nachkommastellen, die Skalierung . Tatsächlich werden die Werte als ganze Zahl zusammen mit einer Skalierung gespeichert. Die folgenden Programme zeigen, daß die Anzahl der Nachkommanullen bei »decimal«, aber nicht bei »double«, auch in der Ausgabe sichtbar wird.

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( 1.000m ); }}
global::System.Console.Out
1.000
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( 1.000 ); }}
global::System.Console.Out
1

Auch das Numerale »2E3m« hat den Typ »decimal«, ein E-Numerale hat den Typ »double« also nur dann, wenn nichts anderes festgelegt wird.

»string«

Ein Zeichenfolgenliteral hat den Typ »string«.

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( "Alpha" ); }}
global::System.Console.Out
Alpha

Ein “string ” ist ein “character string ”, also – wörtlich – eine Kette (Verkettung) von Schriftzeichen, eine Zeichenkette  (Zeichenfolge).

Typen in C# 

In C#  unterscheidet man zwischen einfachen Typen  und Klassentypen.

Wir kennen bisher drei einfache Typen und einen Referenztyp.

einfache Typen
int
double
decimal
Klassentypen
string

Einfache Zahlentypen (wie »int«, »double« und »decimal«) werden auch „numerische Typen“ genannt.

Man kann sich die Unterscheidung zwischen einfachen Typen und Klassentypen vorläufig in etwa so erklären: Der für die Darstellung eines Wertes eines einfachen Typs benötigte Speicherplatz ist konstant (für jeden Wert eines Typs derselbe), während der Speicherplatz eines Wertes eines Klassentyps bei jedem Wert anders sein kann.

Typen im Quelltext

Bis auf weiteres schreiben wir Typen nicht  in Programme. Sie dienen uns lediglich zur Beschreibung  von Programmteilen.

Übungsfragen

?   Literaltypen

Welchen Typ haben die folgenden Literale jeweils?

1
1.2
2E3
2E3m
"2"

Zitate *

If no real-type-suffix is specified, the type of the real literal is double. ”, C# Language Specification Version 5.0, 2.4.4.3 Real literals

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723252 stefan_ram:723252 Typen in C# Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723252, slrprddef723252, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/typen_csharp