Целые типы в Rust
Целые числа в Rust представлены следующими типами:
i8, i16, i32, i64 и
i128. Разница между ними - сколько
байтов занимает ячейка в оперативной памяти и какое
самое большое число в нее помещается.
Самым основным типом для чисел является тип i32.
Это 4 байта, около двух миллиардов в плюс и в минус.
Количество, номер и сумма в разумных пределах туда входят.
Число без указания типа получает именно i32.
Например, число 1500000 помещается, а число
3000000000 больше двух миллиардов -
и в i32 уже не влазит.
Тип isize проблемный, так как для него
размер ячейки зависит от компьютера.
На 32-битной системе это 4 байта, около двух
миллиардов в плюс и в минус. На 64-битной -
8 байт, около девяти квинтиллионов в плюс и в минус.
Тип i64 занимает 8 байт на любом компьютере,
около девяти квинтиллионов в плюс и в минус.
Для чисел, которые не помещаются в i32,
стоит пользоваться именно этим типом.
У такого числа в конце пишут i64.
Тип i16 состоит из 2 байтов, около 32 тысяч
в плюс и в минус. Число вроде 40000
в эти 2 байта уже не поместится.
Тип i8 состоит из 1 байта, около 128
в плюс и в минус. Число вроде 200
в этот байт уже не поместится.
Тип i128 занимает 16 байт. Граница
намного выше девяти квинтиллионов.
Запишем три числа в подходящие типы и выведем их:
let num1: i16 = 9;
let num2: i32 = 1500000;
let num3: i64 = 3000000000i64;
println!("{}", num1);
println!("{}", num2);
println!("{}", num3);
Сведем типы и диапазоны:
| Тип | Байты | Диапазон |
|---|---|---|
i8
|
1
|
от -128 до 127
|
i16
|
2
|
от -32768 до 32767
|
i32
|
4
|
от -2147483648 до 2147483647
|
i64
|
8
|
от -9223372036854775808 до 9223372036854775807
|
i128
|
16
|
намного шире, чем у i64
|
isize
|
4 или 8
|
на 32 битах как i32, на 64 битах как i64
|
В каком диапазоне изменяются числа типа i16?
В каком диапазоне изменяются числа типа i32?
В каком диапазоне изменяются числа типа i64?
В каком диапазоне изменяются числа типа isize?
Есть число 200. Помещается ли оно в диапазон
типа i8?
Есть число 40000. Помещается ли оно в диапазон
типа i16?
Есть число 100000. Помещается ли оно в диапазон
типа i32?
Есть число 3000000000. Помещается ли оно в диапазон
типа i32?
Есть число 100000000000. Помещается ли оно в диапазон
типа i64?
Есть число 9223372036854775808. Помещается ли оно
в диапазон типа i64?