Un integer est un nombre sans partie fractionnaire.
En Cairo, la déclaration de type pour les entiers indique le nombre de bits que le programmeur peut utiliser pour stocker la valeur.
Les entiers non signés ne peuvent représenter que des nombres positifs et le nombre 0 (zéro), ce qui peut être avantageux dans certains contextes de programmation, comme l'indexation de tableaux et la gestion de la mémoire.
Cairo prend également en charge les entiers signés, qui commencent par le préfixe i.
Ces entiers peuvent représenter à la fois des valeurs positives et négatives, avec des tailles allant de i8 à i128.
Chaque variante signée peut stocker des nombres allant de $-2^{n-1}$ à $2^{n-1} - 1$ inclus, où $n$ est le nombre de bits que cette variante utilise.
Par exemple, un i8 peut stocker des nombres de $-2^7$ à $2^7 - 1$, ce qui correspond à des valeurs allant de $-128$ à $127$.
| Taille | Non signé | Signé |
|---|---|---|
| 8 bits | u8 | i8 |
| 16 bits | u16 | i16 |
| 32 bits | u32 | i32 |
| 64 bits | u64 | i64 |
| 128 bits | u128 | i128 |
| 256 bits | u256 | ------ |
Il existe aussi un type entier spécial appelé usize, qui n'est actuellement qu'un alias de u32.
Ce type pourrait jouer un rôle plus distinct à l'avenir, une fois que Cairo pourra être compilé en MLIR (représentation intermédiaire multi-niveaux).
Tu peux écrire des littéraux entiers sous n'importe laquelle des formes présentées dans le tableau ci-dessous.
Note que les littéraux numériques qui peuvent appartenir à plusieurs types numériques acceptent un suffixe de type, comme 57_u8, pour désigner le type.
Il est également possible d'utiliser un séparateur visuel _ dans les littéraux numériques, afin d'améliorer la lisibilité du code.
| Littéraux numériques | Exemple |
|---|---|
| Décimal | 98222 |
| Hexadécimal | 0xff |
| Octal | 0o04321 |
| Binaire | 0b01 |
Alors, comment savoir quel type d'entier utiliser ?
Essaie d'estimer la valeur maximale que ton entier peut atteindre et choisis la taille appropriée.
La principale situation dans laquelle tu utiliserais usize est l'indexation d'une collection quelconque.
Cairo prend en charge les opérations mathématiques de base que l'on attend de tous les types entiers : l'addition, la soustraction, la multiplication, la division et le reste.
La division entière tronque vers zéro, à l'entier le plus proche.
Le code suivant montre comment utiliser chaque opération numérique dans une instruction let :
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
}
Chaque expression dans ces instructions utilise un opérateur mathématique et s'évalue en une seule valeur, qui est ensuite liée à une variable.
La liste de tous les opérateurs que Cairo fournit se trouve dans The Cairo Book.