Rust 是一种静态类型语言,这意味着它必须在编译时知道所有变量的类型。编译器通常可以根据值以及我们如何使用它来推断我们想要使用什么类型。在可能有多种类型的情况下,必须添加类型注释。
Rust 有四种主要类型:整数、浮点数、布尔值和字符
整数类型:
Rust的默认整数类型为i32。
有符号类型表示范围:- 到 -1
无符号类型表示范围:0到 -1
| Length | Signed | Unsigned |
|---|---|---|
| 8-bit | i8 | u8 |
| 16-bit | i16 | u16 |
| 32-bit | i32 | u32 |
| 64-bit | i64 | u64 |
| 128-bit | i128 | u128 |
| arch | isize | usize |
举例说明:
i8表示范围为: - 到 -1, 即-128到127
u8表示范围为: 0 到 -1,即0到255
isize和usize类型取决于您的程序运行的计算机类型:如果您采用 64 位体系结构,则为 64 位;如果您采用 32 位体系结构,则为 32 位。
Rust中的整数文字
除字节文字之外的所有数字文字都允许使用类型后缀,eg:57u8。
下划线'_'可以作为视觉分隔符,eg:1_000
| 不同表示进制 | Example |
|---|---|
| 十进制 | 98_222 |
| 十六进制 | 0xff |
| 八进制 | 0o77 |
| 二进制 | 0b1111_0000 |
字节 (u8 only) | b'A' |
聊下整数溢出:
调试模式下:Rust会检查整数溢出,会导致程序在运行时出现恐慌。
发布模式下:Rust不会对此进行检查,溢出会进行补码运行。0-255的范围溢出后,会从0开始循环到255。依次补码。
浮点类型
Rust 的浮点类型为f32[单精度浮点]和f64[双精度浮点],其大小分别为 32 位和 64 位。
fn main() {
let x = 2.0; // f64
let y: f32 = 3.0; // f32
}
数值运算
Rust 支持您期望的所有数字类型的基本数学运算:加法、减法、乘法、除法和余数
fn main() {
// addition
let sum = 5 + 10;
// subtraction
let difference = 95.5 - 4.3;
// multiplication
let product = 4 * 30;
// division
let quotient = 56.7 / 32.2;
// remainder
let remainder = 43 % 5;
}
布尔类型
Rust 中的布尔类型bool有两个可能的值:true和false,大小为一字节。
fn main() {
let t = true;
let f: bool = false; // with explicit type annotation
}
字符类型
char文字是用单引号指定的,而不是字符串文字,后者使用双引号。
char类型大小为4个字节。表示 Unicode 标量值,这意味着它可以表示的不仅仅是 ASCII。
fn main() {
let c = 'z';
let z = 'ℤ';
let heart_eyed_cat = '😻';
}
复合类型
复合类型可以将多个值分组为一种类型。Rust 有两种原始复合类型:元组和数组。
元组类型
- 元组是将一些具有多种类型的其他值分组为一个复合类型的通用方法。
- 元组有固定的长度:一旦声明,它们的大小就不能增长或缩小。
元组初始化:
let tup: (i32, f64, u8) = (500, 6.4, 1);
或者:
let tup = (500, 6.4, 1);
访问元组:元组变量赋值或者索引的方式:
let (x, y, z) = tup;
或者
let five_hundred = tup.0;
let six_point_four = tup.1;
let one = tup.2;
数组类型
数组的每个元素必须具有相同的类型。 Rust 中的数组有固定的长度。
数组初始化:
let a = [1, 2, 3, 4, 5];
let a: [i32; 5] = [1, 2, 3, 4, 5];
let a = [3; 5]; // 将5个元素值都赋值为3
访问数组: let first = a[0];
数组越界会怎么样呢,编译器会直接提示错误。 搞下,看下越界报错:
powershell新建项目:
cargo new arrys && cd arrys
编辑src/main.rs代码:
fn main() {
let a = [1,2,3,4,5];
let index = 10;
let element = a[index];
println!("The value of element is:{}", element);
}
运行:cargo run arrys
OK! 到此为止。