In

Inteiros em Cairo

1 exercício

Sobre Inteiros

Um integer é um número sem parte fracionária. Em Cairo, a declaração de tipo para inteiros indica o número de bits que o programador pode usar para armazenar o valor.

Os inteiros sem sinal só podem representar números positivos e o número 0 (zero), o que pode ser benéfico em certos contextos de programação, como a indexação de arrays e a gestão de memória.

O Cairo também oferece suporte para inteiros com sinal, começando com o prefixo i. Estes inteiros podem representar valores positivos e negativos, com tamanhos que vão de i8 a i128. Cada variante com sinal pode armazenar números de $-2^{n-1}$ a $2^{n-1} - 1$, inclusive, em que $n$ é o número de bits que essa variante usa. Por exemplo, um i8 pode armazenar números de $-2^7$ a $2^7 - 1$, o que equivale a $-128$ a $127$.

Tamanho Sem sinal Com sinal
8 bits u8 i8
16 bits u16 i16
32 bits u32 i32
64 bits u64 i64
128 bits u128 i128
256 bits u256 ------

Há também um tipo de inteiro especial chamado usize, que atualmente é apenas um alias para u32. Este tipo pode vir a desempenhar um papel mais distinto no futuro, quando o Cairo puder ser compilado para MLIR (Representação Intermédia Multinível).

Literais inteiros em Cairo

Podes escrever literais inteiros em qualquer uma das formas mostradas na tabela abaixo. Repara que os literais numéricos que podem ser de vários tipos numéricos permitem um sufixo de tipo, como 57_u8, para designar o tipo. Também é possível usar um separador visual _ nos literais numéricos, para melhorar a legibilidade do código.

Literais numéricos Exemplo
Decimal 98222
Hexadecimal 0xff
Octal 0o04321
Binário 0b01

Então, como sabes que tipo de inteiro deves usar? Tenta estimar o valor máximo que o teu inteiro pode ter e escolhe o tamanho adequado. A principal situação em que usarias usize é quando indexas algum tipo de coleção.

Operações numéricas

O Cairo suporta as operações matemáticas básicas que esperarias para todos os tipos de inteiros: adição, subtração, multiplicação, divisão e resto. A divisão inteira trunca em direção a zero, para o inteiro mais próximo. O código seguinte mostra como usarias cada operação numérica numa instrução 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 expressão nestas instruções usa um operador matemático e resulta num único valor, que depois é associado a uma variável.

A lista de todos os operadores que o Cairo fornece pode ser encontrada em The Cairo Book.

Editar via GitHub A ligação abre numa nova janela ou separador

Aprende Inteiros

A prática está bloqueada

Desbloqueia mais 2 exercícios para praticares Inteiros