Crystal bietet eine Vielzahl verschiedener Zahlentypen für unterschiedliche Zwecke. Manche Typen sind zum Beispiel schneller, haben aber einen kleineren Wertebereich als andere. Andere haben einen größeren Wertebereich, sind dafür aber langsamer.
In Crystal gibt es sowohl vorzeichenbehaftete als auch vorzeichenlose Ganzzahltypen. Die vorzeichenbehafteten Ganzzahltypen können positiv oder negativ sein. Die vorzeichenlosen Ganzzahltypen können nur positiv sein.
Das sind die vorzeichenbehafteten Ganzzahltypen in Crystal:
| Typ | Größe (Bits) | Wertebereich |
|---|---|---|
Int8 |
8 | -128 bis 127 |
Int16 |
16 | -32_768 bis 32_767 |
Int32 |
32 | -2_147_483_648 bis 2_147_483_647 |
Int64 |
64 | -9_223_372_036_854_775_808 bis 9_223_372_036_854_775_807 |
Int128 |
128 | -170_141_183_460_469_231_731_687_303_715_884_105_728 bis 170_141_183_460_469_231_731_687_303_715_884_105_727 |
Die kleineren Typen brauchen weniger Speicher und sind schneller als die größeren, haben aber einen kleineren Wertebereich.
Wenn du weißt, dass die Werte in einem bestimmten Bereich liegen, ist es am besten, den kleinstmöglichen Typ zu verwenden, um Speicher zu sparen und die Leistung zu verbessern.
Der Standardtyp für Ganzzahlen ist Int32.
Um eine Ganzzahl mit einem bestimmten Typ zu deklarieren, kannst du den Typnamen als Suffix verwenden, indem du <number>_I <bit> anhängst.
1_i8.class
# => Int8
Mit der Methode to_i<bit> kannst du zwischen verschiedenen Ganzzahltypen umwandeln.
Die Methode to_i wandelt in den Standardtyp für Ganzzahlen um, Int32.
1_i8.to_i16.class
# => Int16
2_i16.to_i.class
# => Int32
Das sind die vorzeichenlosen Ganzzahltypen in Crystal:
UInt8, UInt16, UInt32, UInt64, UInt128
Der einzige Unterschied zwischen vorzeichenbehafteten und vorzeichenlosen Ganzzahlen ist, dass vorzeichenlose Ganzzahlen nur positiv sein können.
Um eine vorzeichenlose Ganzzahl mit einem bestimmten Typ zu deklarieren, kannst du den Typnamen als Suffix verwenden, indem du <number>_u<bit> anhängst.
Mit der Methode to_u<bit> kannst du zwischen verschiedenen vorzeichenlosen Ganzzahltypen umwandeln.
Die Methode to_u wandelt in den Standardtyp für vorzeichenlose Ganzzahlen um, UInt32.
1_u8.to_u16.class
# => UInt16
Das sind die Gleitkommazahltypen in Crystal:
| Typ | Größe (Bits) | Wertebereich |
|---|---|---|
Float32 |
32 | 1.2E-38 bis 3.4E+38 |
Float64 |
64 | 2.3E-308 bis 1.7E+308 |
Es gibt zwei verschiedene Gleitkommazahltypen, von denen einer präziser ist als der andere.
Der Standardtyp für Gleitkommazahlen ist Float64.
Mit der Methode to_f<bit> kannst du zwischen verschiedenen Gleitkommazahltypen umwandeln.
Die Methode to_f wandelt in den Standardtyp für Gleitkommazahlen um, Float64.
Die ESA (Exercism Space Agency) plant mit voller Geschwindigkeit eine neue Mission zum Phobos, einem Mond des Mars. Das Ziel der Mission ist, eine Sonde auf der Oberfläche von Phobos zu landen und Daten über die Oberfläche zurückzusenden. Die ESA hat dich um Hilfe beim Bau des Navigationscomputers für die Sonde gebeten. Der Navigationscomputer hat nur wenig Speicher, deshalb müssen wir den Speicherverbrauch so gering wie möglich halten. Deshalb müssen wir die passenden Datentypen verwenden.
Der Navigationscomputer muss die Entfernung zwischen einigen Objekten im Weltraum kennen, um die richtigen Berechnungen durchzuführen; die Entfernung wird in km gemessen.
Definiere die folgenden Konstanten:
NEPTUNE_DISTANCE mit dem Wert 4_400_000_000, der als Int64 gespeichert werden sollMARS_DISTANCE mit dem Wert 227_940_000, der als Int32 gespeichert werden sollATMOSPHERE_DISTANCE mit dem Wert 10_000, der als Int16 gespeichert werden sollDer Navigationscomputer muss die Fläche einiger Objekte im Weltraum kennen, um die richtigen Berechnungen durchzuführen. Eine Fläche kann NICHT negativ sein. Die Ingenieure hatten geplant, dass das Programm einen Überlauffehler erzeugt, wenn die Fläche negativ ist. Allerdings haben die Ingenieure vergessen, die vorzeichenbehaftete Ganzzahl in eine vorzeichenlose Ganzzahl zu ändern.
Deshalb hätten die Ingenieure gerne ein Programm, das eine vorzeichenbehaftete Ganzzahl in eine vorzeichenlose Ganzzahl umwandelt.
Implementiere die Methode Navigation#correct_area_analysis, die ein measurement als Argument entgegennimmt und die Fläche als vorzeichenlose Ganzzahl mit 32 Bit zurückgibt.
Die angegebene Fläche passt immer in eine vorzeichenlose Ganzzahl mit 32 Bit.
measurement = 52554
measurement.class
# => Int32
Navigation.new.correct_area_analysis(measurement)
# => 52554
Navigation.new.correct_area_analysis(measurement).class
# => UInt32
Der Navigationscomputer muss die Geschwindigkeit der Sonde kennen. Die Geschwindigkeit wird in m/s gemessen.
Um die Geschwindigkeit zu berechnen, müssen wir die zurückgelegte Strecke und die dafür benötigte Zeit kennen. Dann nimmst du die Strecke und teilst sie durch die Zeit.
Die Geschwindigkeit muss nicht exakt sein und wird nie eine besonders große Zahl sein.
Deshalb können wir ein Float32 verwenden.
Implementiere die Methode Navigation#calculate_velocity, die distance und time als Argumente entgegennimmt und die Geschwindigkeit als Float mit 32 Bit zurückgibt.
distance = 52554
time = 2.5
Navigation.new.calculate_velocity(distance, time)
# => 21021.6
Navigation.new.calculate_velocity(distance, time).class
# => Float32
Melde dich bei Exercism an, um Crystal mit 26 Konzepte142 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.