Un integer è un numero senza parte frazionaria.
In Cairo, la dichiarazione del tipo per gli interi indica il numero di bit che il programmatore può usare per memorizzare il valore.
Gli interi senza segno possono rappresentare solo numeri positivi e il numero 0 (zero), il che può essere utile in certi contesti di programmazione, come l'indicizzazione degli array e la gestione della memoria.
Cairo supporta anche gli interi con segno, che iniziano con il prefisso i.
Questi interi possono rappresentare sia valori positivi che negativi, con dimensioni che vanno da i8 a i128.
Ogni variante con segno può memorizzare numeri da $-2^{n-1}$ a $2^{n-1} - 1$ inclusi, dove $n$ è il numero di bit usati da quella variante.
Per esempio, un i8 può memorizzare numeri da $-2^7$ a $2^7 - 1$, cioè da $-128$ a $127$.
| Lunghezza | Senza segno | Con segno |
|---|---|---|
| 8-bit | u8 | i8 |
| 16-bit | u16 | i16 |
| 32-bit | u32 | i32 |
| 64-bit | u64 | i64 |
| 128-bit | u128 | i128 |
| 256-bit | u256 | ------ |
Esiste anche un tipo di intero speciale chiamato usize, che al momento è solo un alias per u32.
Questo tipo potrebbe assumere un ruolo più distinto in futuro, quando Cairo potrà essere compilato in MLIR (Multi-Level Intermediate Representation).
Puoi scrivere i letterali interi in una qualsiasi delle forme mostrate nella tabella qui sotto.
Nota che i letterali numerici che possono avere più tipi numerici ammettono un suffisso di tipo, come 57_u8, per indicare il tipo.
È anche possibile usare un separatore visivo _ nei letterali numerici, per migliorare la leggibilità del codice.
| Letterali numerici | Esempio |
|---|---|
| Decimale | 98222 |
| Esadecimale | 0xff |
| Ottale | 0o04321 |
| Binario | 0b01 |
Ma allora come fai a sapere quale tipo di intero usare?
Prova a stimare il valore massimo che il tuo intero può assumere e scegli la dimensione adatta.
La situazione principale in cui useresti usize è quando indicizzi una qualche collezione.
Cairo supporta le operazioni matematiche di base che ti aspetti per tutti i tipi di intero: addizione, sottrazione, moltiplicazione, divisione e resto.
La divisione tra interi tronca verso lo zero all'intero più vicino.
Il codice seguente mostra come useresti ogni operazione numerica in un'istruzione 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
}
Ogni espressione in queste istruzioni usa un operatore matematico e restituisce un singolo valore, che viene poi associato a una variabile.
L'elenco di tutti gli operatori forniti da Cairo si trova in The Cairo Book.