Un integer es un número sin parte fraccionaria.
En Cairo, la declaración de tipo para los enteros indica el número de bits que el programador puede usar para almacenar el valor.
Los enteros sin signo solo pueden representar números positivos y el número 0 (cero), lo cual puede ser beneficioso en ciertos contextos de programación, como la indexación de arrays y la gestión de memoria.
Cairo también ofrece soporte para enteros con signo, que comienzan con el prefijo i.
Estos enteros pueden representar tanto valores positivos como negativos, con tamaños que van desde i8 hasta i128.
Cada variante con signo puede almacenar números desde $-2^{n-1}$ hasta $2^{n-1} - 1$ inclusive, donde $n$ es el número de bits que usa esa variante.
Por ejemplo, un i8 puede almacenar números desde $-2^7$ hasta $2^7 - 1$, lo que equivale a $-128$ a $127$.
| Longitud | Sin signo | Con signo |
|---|---|---|
| 8 bits | u8 | i8 |
| 16 bits | u16 | i16 |
| 32 bits | u32 | i32 |
| 64 bits | u64 | i64 |
| 128 bits | u128 | i128 |
| 256 bits | u256 | ------ |
También existe un tipo de entero especial llamado usize, que actualmente es solo un alias de u32.
Es posible que este tipo desempeñe un papel más distintivo en el futuro, una vez que Cairo pueda compilarse a MLIR (Multi-Level Intermediate Representation).
Puedes escribir literales de enteros en cualquiera de las formas que se muestran en la siguiente tabla.
Ten en cuenta que los literales numéricos que pueden ser de varios tipos numéricos permiten un sufijo de tipo, como 57_u8, para designar el tipo.
También es posible usar un separador visual _ en los literales numéricos, con el fin de mejorar la legibilidad del código.
| Literales numéricos | Ejemplo |
|---|---|
| Decimal | 98222 |
| Hexadecimal | 0xff |
| Octal | 0o04321 |
| Binario | 0b01 |
Entonces, ¿cómo sabes qué tipo de entero usar?
Intenta estimar el valor máximo que puede tener tu entero y elige el tamaño adecuado.
La situación principal en la que usarías usize es al indexar algún tipo de colección.
Cairo admite las operaciones matemáticas básicas que esperarías para todos los tipos de enteros: suma, resta, multiplicación, división y residuo.
La división de enteros trunca hacia cero al entero más cercano.
El siguiente código muestra cómo usarías cada operación numérica en una sentencia 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
}
Cada expresión en estas sentencias usa un operador matemático y evalúa a un solo valor, que luego se vincula a una variable.
La lista de todos los operadores que ofrece Cairo se encuentra en The Cairo Book.