1. Welche Zahlen gibt es?
Beim Programmieren arbeiten wir ständig mit Zahlen – vom Alter eines Users bis zur Anzahl der Sterne in der Galaxie oder Cent auf dem Bankkonto. Aber verschiedene Aufgaben brauchen verschiedene Arten von Zahlen: Manchmal reicht es, nur ganze Zahlen zu speichern, manchmal braucht man sehr genaue Brüche und manchmal sind nur "positive Zahlen" erlaubt.
Ganze Zahlen (int und andere)
Eine ganze Zahl ist eine Zahl ohne Nachkommastellen.
In C# benutzt man meistens den Typ int, aber es gibt noch ein paar andere Varianten, die sich in Größe und Wertebereich unterscheiden.
- int – der Standard-"Arbeitstyp" für ganze Zahlen. Er kann ziemlich große (und kleine) Werte speichern und braucht nicht viel Speicher.
Zum Beispiel für Like-Zähler, Alter, Anzahl der Tage im Jahr wird fast immer int verwendet. - long – wird genutzt, wenn die Werte sehr groß werden können (z.B. Milliarden oder Billionen).
Beispiel: Die Summe aller YouTube-Views in der Geschichte speichern. - short – ein sparsamer, aber selten genutzter Typ. Passt da, wo viele kleine Werte vorkommen (z.B. Audiodaten, Farbkomponenten).
- byte – für noch kleinere Werte, besonders in Grafik und beim Arbeiten mit Dateien, wo Speicherplatz wichtig ist.
Gebrochene Zahlen (double, float, decimal)
Manchmal muss man mit Zahlen arbeiten, die eine Nachkommastelle haben. Zum Beispiel Lufttemperatur, Notendurchschnitt eines Studenten, Preis eines Produkts mit Cent.
- double – das ist der "Standardtyp" für gebrochene Zahlen. Genau genug für die meisten Berechnungen (Beispiel: 3.1415926535…).
- float – ein leichterer und weniger genauer Typ, kommt oft in Grafikaufgaben oder bei großen Datenmengen vor, wo Speicher gespart werden muss.
- decimal – gedacht für Finanz- und Buchhaltungsaufgaben, wenn Genauigkeit bis auf den Cent wichtig ist, damit keine "Verluste" durch die Art der Speicherung entstehen. Zum Beispiel für Kontostand, Produktpreis, Wechselkurs.
Spezielle Zahlentypen
In C# gibt es zusätzliche Zahlentypen für besondere Fälle:
- uint, ulong, ushort – "vorzeichenlose" Typen, erlauben nur positive Werte, dafür ist der Wertebereich doppelt so groß wie bei ihren "vorzeichenbehafteten" Pendants.
- sbyte – kleiner, vorzeichenbehafteter Typ (für kompaktes Speichern von negativen und positiven Werten von -128 bis 127).
- BigInteger – wenn du mit riesigen Zahlen arbeiten musst, die die Standardbereiche übersteigen, z.B. in Kryptographie oder Astronomie-Berechnungen.
2. Vorzeichenbehaftete und vorzeichenlose Zahlen
Vorzeichenbehafteter Typ kann sowohl positive als auch negative Zahlen speichern. Das ist praktisch, wenn Werte "über und unter Null" sein können: z.B. Temperatur, Kontostand, Höhe über dem Meeresspiegel.
Vorzeichenloser Typ – nur Null und positive Zahlen. Passt, wenn es kein Minus geben kann – z.B. Anzahl der Leute im Raum, Bytes in einer Datei, Zeit.
Beispiel:
- int (vorzeichenbehaftet): -10, 0, 50
- uint (vorzeichenlos): 0, 10, 1000
Mit einem vorzeichenlosen Typ kannst du in einer Variable den doppelten Maximalwert speichern (weil es keine "negative Hälfte" des Bereichs gibt). Sie werden verwendet, wenn klar ist, dass der Wert nie negativ sein kann.
Vorzeichenbehaftete Ganzzahltypen
| Typ | Größe | Wertebereich | Beispiel für Verwendung |
|---|---|---|---|
|
1 Byte | -128 bis 127 | -128, 0, 127 |
|
2 Bytes | -32 768 bis 32 767 | -1000, 0, 32000 |
|
4 Bytes | -2 147 483 648 bis 2 147 483 647 | -1000000, 0, 2000000 |
|
8 Bytes | -9 223 372 036 854 775 808 bis 9 223 372 036 854 775 807 |
-10_000_000_000, 1 |
Vorzeichenlose Ganzzahltypen
| Typ | Größe | Wertebereich | Beispiel für Verwendung |
|---|---|---|---|
|
1 Byte | 0 bis 255 | 0, 128, 255 |
|
2 Bytes | 0 bis 65 535 | 1000, 65000 |
|
4 Bytes | 0 bis 4 294 967 295 | 100, 4000000000 |
|
8 Bytes | 0 bis 18 446 744 073 709 551 615 | 1, 18_000_000_000_000 |
Gebrochene Typen
| Typ | Größe | Beispielwerte | Beschreibung |
|---|---|---|---|
|
4 Bytes | 3.14f, -0.001f | einfache Genauigkeit (7 Stellen) |
|
8 Bytes | 3.1415, -1.7E+308 | doppelte Genauigkeit (15-16 Stellen) |
|
16 Bytes | 0.1m, 12345.6789m | hohe Genauigkeit für Finanzen |
3. Suffixe für Zahlen
In manchen Situationen musst du explizit angeben, welchen Typ du für eine Zahl verwenden willst. Das geht mit Suffixen:
- L oder l – für den Typ long (z.B. 10000000000L)
- U oder u – für den Typ uint (z.B. 123U)
- F oder f – für den Typ float (z.B. 3.14f)
- D oder d – für den Typ double (meist nicht nötig, weil gebrochene Zahlen ohne Suffix double sind)
- M oder m – für den Typ decimal (z.B. 99.99m – besonders wichtig bei Geld!)
Wenn du kein Suffix angibst, gilt standardmäßig: Ganze Zahl ist int, gebrochene Zahl ist double. Zum Beispiel ist 42 ein int, und 3.14 ein double.
Wozu braucht man das? Zum Beispiel, um keinen Fehler zu bekommen, wenn du einer long-Variable eine große Zahl zuweist:
long bigNumber = 9000000000L; // wenn du das L weglässt, gibt's einen Compilerfehler
Und für Geld solltest du immer decimal mit dem Suffix m verwenden:
decimal price = 999.99m;
4. Trenner als Unterstrich _
Bei langen Zahlen kann man sich leicht in den Nullen vertun. Für bessere Lesbarkeit kannst du in C# Unterstriche innerhalb der Zahl verwenden.
int population = 146_700_000;
long stars = 100_000_000_000L;
Das ist absolut legal: Der Compiler ignoriert die Unterstriche, und du siehst auf einen Blick die Stellen. Wichtig: Kein Unterstrich am Anfang, am Ende, nach dem Punkt oder vor dem Suffix.
5. Zeichentyp char
Manchmal musst du im Programm nicht mit Zahlen, sondern mit einzelnen Zeichen arbeiten: Buchstaben, Ziffern, Symbolen oder sogar Leerzeichen. Dafür gibt es den speziellen Typ – char.
Was ist char?
Das ist eine Variable, die ein einzelnes Zeichen speichert:
- lateinischen oder kyrillischen Buchstaben ('A', 'я')
- Ziffer ('5')
- Sonderzeichen ('#', '%', '@')
- Steuerzeichen ('\\n' – Zeilenumbruch)
Besonderheiten:
- Der Wert vom Typ char wird in einfachen Anführungszeichen geschrieben: char letter = 'B';
- Eigentlich wird im char der Zahlenwert des Zeichens (im Unicode-System) gespeichert, deshalb kannst du char vergleichen, in int umwandeln und sogar einfache Rechnungen machen:
char a = 'A';
char b = (char)(a + 1); // 'B'
int code = a; // 65 — Code vom Buchstaben 'A'
Du kannst auch spezielle Zeichen verwenden, zum Beispiel: char tab = '\\t'; // Tabulatorzeichen
Wozu braucht man char?
Um mit Text zeichenweise zu arbeiten (z.B. den ersten Buchstaben in einem String prüfen, Satzzeichen suchen, Passwort zeichenweise einlesen).
GO TO FULL VERSION