Un integer es un número sin parte fraccionaria.
En Cairo, la declaración de tipo de los números 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 resultar beneficioso en ciertos contextos de programación, como la indexación de arrays y la gestión de memoria.
Cairo también admite enteros con signo, que empiezan por el prefijo i.
Estos enteros pueden representar tanto valores positivos como negativos, con tamaños que van de i8 a i128.
Cada variante con signo puede almacenar números desde $-2^{n-1}$ hasta $2^{n-1} - 1$, ambos 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$, es decir, de $-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 no es más que un alias de u32.
Es posible que este tipo desempeñe un papel más diferenciado en el futuro, cuando Cairo pueda compilarse a MLIR (Multi-Level Intermediate Representation).
Puedes escribir literales de números 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 admiten un sufijo de tipo, como 57_u8, para designar el tipo.
También es posible usar un separador visual _ en los literales numéricos para 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 cabría esperar para todos los tipos de enteros: suma, resta, multiplicación, división y residuo.
La división entera trunca hacia cero hasta el entero más cercano.
El siguiente código muestra cómo usarías cada operación numérica en una instrucción 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 de estas instrucciones usa un operador matemático y se evalúa como un único valor, que después se asigna a una variable.
Puedes encontrar una lista de todos los operadores que ofrece Cairo en The Cairo Book.