integer - це число без дробової частини.
У Cairo оголошення типу для цілих чисел указує, скільки бітів програміст може використати для зберігання значення.
Беззнакові цілі числа можуть представляти лише додатні числа та число 0 (нуль), що може бути корисним у певних контекстах програмування, як-от індексування масиву та керування памʼяттю.
Cairo також підтримує знакові цілі числа, які починаються з префікса i.
Такі цілі числа можуть представляти як додатні, так і відʼємні значення, а їхні розміри сягають від i8 до i128.
Кожен знаковий варіант може зберігати числа від $-2^{n-1}$ до $2^{n-1} - 1$ включно, де $n$ - кількість бітів, які використовує цей варіант.
Наприклад, i8 може зберігати числа від $-2^7$ до $2^7 - 1$, тобто від $-128$ до $127$.
| Довжина | Беззнаковий | Знаковий |
|---|---|---|
| 8-бітний | u8 | i8 |
| 16-бітний | u16 | i16 |
| 32-бітний | u32 | i32 |
| 64-бітний | u64 | i64 |
| 128-бітний | u128 | i128 |
| 256-бітний | u256 | ------ |
Є також особливий тип цілих чисел під назвою usize, який наразі є лише псевдонімом для u32.
У майбутньому цей тип може відігравати помітнішу роль, коли Cairo можна буде компілювати в MLIR (Multi-Level Intermediate Representation).
Ми можемо записувати літерали цілих чисел у будь-якій з форм, наведених у таблиці нижче.
Зауважмо, що числові літерали, які можуть належати до кількох числових типів, дозволяють суфікс типу, як-от 57_u8, щоб позначити тип.
Також можна використовувати візуальний розділювач _ у числових літералах, щоб покращити читабельність коду.
| Числові літерали | Приклад |
|---|---|
| Десятковий | 98222 |
| Шістнадцятковий | 0xff |
| Вісімковий | 0o04321 |
| Двійковий | 0b01 |
То як дізнатися, який тип цілого числа використати?
Спробуймо оцінити максимальне значення, яке може мати наше ціле число, і вибрати відповідний розмір.
Основна ситуація, у якій ми використовуємо usize, - це індексування якоїсь колекції.
Cairo підтримує базові математичні операції, яких ми очікуємо для всіх цілих типів: додавання, віднімання, множення, ділення та остачу.
Ділення цілих чисел відкидає дробову частину в напрямку нуля до найближчого цілого.
Наведений нижче код показує, як використати кожну числову операцію в інструкції 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
}
Кожен вираз у цих інструкціях використовує математичний оператор і обчислюється в одне значення, яке потім привʼязується до змінної.
Перелік усіх операторів, які надає Cairo, можна знайти в The Cairo Book.