Ein integer ist eine Zahl ohne Bruchteil.
In Cairo gibt die Typdeklaration für Ganzzahlen an, wie viele Bits dem Programmierer zum Speichern des Werts zur Verfügung stehen.
Vorzeichenlose Ganzzahlen können nur positive Zahlen und die Zahl 0 (null) darstellen, was in bestimmten Programmierkontexten von Vorteil sein kann, etwa bei der Indizierung von Arrays und der Speicherverwaltung.
Cairo unterstützt außerdem vorzeichenbehaftete Ganzzahlen, die mit dem Präfix i beginnen.
Diese Ganzzahlen können sowohl positive als auch negative Werte darstellen, mit Größen von i8 bis i128.
Jede vorzeichenbehaftete Variante kann Zahlen von $-2^{n-1}$ bis $2^{n-1} - 1$ einschließlich speichern, wobei $n$ die Anzahl der Bits ist, die diese Variante verwendet.
Zum Beispiel kann ein i8 Zahlen von $-2^7$ bis $2^7 - 1$ speichern, was $-128$ bis $127$ entspricht.
| Länge | Vorzeichenlos | Vorzeichenbehaftet |
|---|---|---|
| 8 Bit | u8 | i8 |
| 16 Bit | u16 | i16 |
| 32 Bit | u32 | i32 |
| 64 Bit | u64 | i64 |
| 128 Bit | u128 | i128 |
| 256 Bit | u256 | ------ |
Es gibt außerdem einen speziellen Ganzzahltyp namens usize, der derzeit nur ein Alias für u32 ist.
Dieser Typ könnte in Zukunft eine deutlichere Rolle spielen, sobald Cairo nach MLIR (Multi-Level Intermediate Representation) kompiliert werden kann.
Du kannst Ganzzahlliterale in jeder der Formen schreiben, die in der folgenden Tabelle gezeigt werden.
Beachte, dass Zahlenliterale, die mehrere numerische Typen haben können, ein Typ-Suffix wie 57_u8 erlauben, um den Typ festzulegen.
Es ist auch möglich, einen visuellen Trenner _ für Zahlenliterale zu verwenden, um die Lesbarkeit des Codes zu verbessern.
| Numerische Literale | Beispiel |
|---|---|
| Dezimal | 98222 |
| Hexadezimal | 0xff |
| Oktal | 0o04321 |
| Binär | 0b01 |
Woher weißt du nun, welchen Ganzzahltyp du verwenden solltest?
Versuche abzuschätzen, welchen maximalen Wert dein int annehmen kann, und wähle die passende Größe.
Die wichtigste Situation, in der du usize verwendest, ist die Indizierung einer Art von Sammlung.
Cairo unterstützt die grundlegenden mathematischen Operationen, die du für alle Ganzzahltypen erwartest: Addition, Subtraktion, Multiplikation, Division und Rest.
Die Ganzzahldivision schneidet in Richtung Null auf die nächste Ganzzahl ab.
Der folgende Code zeigt, wie du jede numerische Operation in einer let-Anweisung verwendest:
fn main() {
// addition
let sum = 5_u128 + 10_u128;
// subtraction
let difference = 95_u128 - 4_u128;
// multiplication
let product = 4_u128 * 30_u128;
// division
let quotient = 56_u128 / 32_u128; // result is 1
let quotient = 64_u128 / 32_u128; // result is 2
// remainder
let remainder = 43_u128 % 5_u128; // result is 3
}
Jeder Ausdruck in diesen Anweisungen verwendet einen mathematischen Operator und ergibt einen einzelnen Wert, der dann an eine Variable gebunden wird.
Eine Liste aller Operatoren, die Cairo bereitstellt, findest du in The Cairo Book.