Перейти к основному содержанию

5. Базовые типы данных в Rust

В языке Rust каждое значение относится к определенному типу данных. Раст проверяет достоверность значений, прежде чем они будут сохранены или обработаны программой. Это ещё одна из гарантий стабильного поведения кода.

Компилятор может автоматически определить тип данных переменной на основе присвоенного ей значения. Однако правильнее, особенно в начале обучения, всегда явно указывать типы данных. Так вы привыкнете к этой парадигме статически типизированного языка программирования.

Вспомним двоичную систему

Компьютер осуществляет вычисления в двоичной системе счисления. Бит – это минимальная единица измерения объёма информации, так как она хранит одно из двух значений: 0 или 1.

Количество значений в десятичной системе счисления:

1 бит - 2 (0 и 1)

8 бит - 256 (0-255, это 1 байт)

16 бит - 65536

32 бит - 4 294 967 296

Подробнее почитайте в учебниках.

Числовые типы

Беззнаковое целое (Unsigned Integer)

Обозначается как: u8, u16, u32, u64, u128, usize.

Число после буквы означает количество бит выделяемых для хранения числа. Например, u8 может хранить числа от 0 до до 255, что соответствует (2)8 различных чисел.

usize - размер зависит от компьютера, на котором работает ваша программа (32 или 64 бит)

Целое число (Integer )

i8, i16, i32, i64, i128, isize

К примеру, i8 может хранить числа от -(2)7 до (2)7-1, что соответствует от -128 до 127. Почему 2 в седьмой, а не в восьмой степени, спросите вы, ответ: один бит тратится на хранение знака (плюс или минус).

isize - размер зависит от компьютера, на котором работает ваша программа (32 или 64 бит)

Если тип не указан, то Rust определяет тип целого числа как i32.

Дробное число (Float)

Из за особенностей хранения в памяти их называют числами с плавающей точкой, отсюда и float.

f32: хранит число с плавающей точкой, которое занимает в памяти 32 бита.

f64: хранит число с плавающей точкой, которое занимает в памяти 64 бита.

Типом по умолчанию является f64, потому что все современные CPU работают с ним приблизительно с такой же скоростью, как и с f32, но с большей точностью. Его диапазон приблизительно от -1.8 × 10308 до +1.8 × 10308.

Числа пишутся через точку, например 37.0 или 0.0423423567.

Числа с плавающей точкой представлены согласно стандарту IEEE-754. В этих float все сложно, например, в 64-битных числах один бит расходуется на знак, 11 бит на порядок и 52 бита на мантиссу, т.е. дробную часть. Но пока это не важно.

Нечисловые типы

Логический тип (bool)

Принимает одно из значений: true или false.

Символьный тип (char)

Char может хранить отдельные символы Unicode в одинарных кавычках.

Например: 'Ы', 'r', '5'

Фиксированная cтрока (&str)

&str хранит фиксированную последовательность символов в кодировке UTF-8, который заключается в двойные кавычки.

Например: "Кошка бродит по дорожке", "monitor", "3.141593".

Фиксированная строка неизменяемая, её значение известно во время компиляции

Строковый объект (String)

Строковый объект похож на строку &str, но по другому хранится в памяти и поэтому размер этой строки можно изменить. К типу String вернемся в одной из следующих лекций.

Давайте далее строку &str называть фиксированная строка, а строковый объект String разрешим себе называть просто строка.

Указание типа данных

В языке Rust тип данных указывается рядом с переменной после двоеточия. Например: variable_оne: i32;

Иногда, когда компилятор может сам выяснить что за тип у данной переменной, в таком случае его не обязательно указывать. Хотя явное указание предпочтительнее, тем более, если код вашей программы могут использовать и другие программисты.

Также можно, но чаще не нужно, явно указывать тип данных числа в выражениях:

let b: f64 = a / 2.4_f64;

Здесь подчеркивание это просто разделитель для удобства чтения. Подчеркивание можно также использовать в длинных числах, например, 31_240_395 то же что и 31240395.

Системы счисления

Иногда нужно хранить данные не в десятичной системе, для этого можно использовать префиксы:

Двоичный формат (binary) — 0b

Восьмеричный формат (octal) — 0o

Шестнадцатеричный формат (hexadecimal) — 0x

Например:

fn main() {
	println!("{}", 0x2a);	// Или с разделителем 0x_2a
}
Выведет в консоль: 42

Потому, что 2a в шестнадцатеричной системе это 42 в десятеричной:

Приведение типов

Приведение типов – это преобразование типа данных переменной в какой-либо другой тип данных. Рассмотрим их в лекции 11. Сложные типы данных.

Для просмотра заданий и решений, а также публикации своих решений необходимо зарегистрироваться на сайте.

Всё бесплатно, мы просто хотим с вами познакомиться и понять насколько актуально то, что мы делаем.

© Клют И. А., 2022. Копирование контента возможно только с письменного разрешения автора.