第一节、变量
变量和赋值
Rust的变量都是有类型的,在定义的时候可以写上类型,也可以不写。 在没有写类型的情况下,编译器会自动推断出变量的类型。
定义变量
let x = 5;
let x = 5;
x = 6; //这个操作会报错
let mut x = 5;
x = 6;
//或者
let x = 5;
let x = 6;
let x = "Hello os2edu" ; //甚至可以重新定类型
下面这个做法可行吗?
let mut x = 5;
x = 6; //A、可行吗?
x = "Hello" ;//B、可行吗?
let x = "Hello"; //C、可行吗?
常数
const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
数据类型
int类型
Rust 整型
| 长度 | 有符号 | 无符号 |
|---|---|---|
| 8-bit | i8 |
u8 |
| 16-bit | i16 |
u16 |
| 32-bit | i32 |
u32 |
| 64-bit | i64 |
u64 |
| 128-bit | i128 |
u128 |
| arch | isize |
usize |
-
有符号的取值范围是 -(2n - 1) 到 2n - 1 - 1 之间, 其中 n 是长度里面的位数. 例如:
i8就是 -(27) 到 27 - 1, 计算结果 -128 to 127. -
无符号类型 0 to 2n - 1, 例如:
u8就是 0 to 28 - 1, 计算结果是 0 to 255.
“arch”:如果您使用的是 64 位架构,则为 64 位;如果您使用的是 32 位,则为32 位架构。
Rust整型的进制表示
| Number literals | Example |
|---|---|
| Decimal | 98_222 |
| Hex | 0xff |
| Octal | 0o77 |
| Binary | 0b1111_0000 |
Byte (u8 only) |
b'A' |
十进制 98_222 ,就是98222。
浮点类型
Rust 也有两种用于浮点数的原始类型,它们是带小数点的数字。Rust 的浮点类型是f32和f64,它们的大小分别为 32 位和 64 位。默认类型是f64 因为在现代 CPU 上它的速度大致相同,f32但精度更高。所有浮点类型都是有符号的。
这是一个显示实际浮点数的示例:
文件名:src/main.rs
fn main() {
let x = 2.0; // f64
let y: f32 = 3.0; // f32
}
布尔型
let t = true;
let f: bool = false;
字符类型
Rust 的char类型是该语言最原始的字母类型。下面是一些声明char值的例子:
let c = 'z';
let z = 'ℤ';
let heart_eyed_cat = '😻';
char字符类型和字符串类型是不能做替换的。字符型占固定的4个字节空间。 而字符串的每个字是utf-8,utf-8是1-4可变长度。英文字母是1个字节,而汉字是1-3个字节,更多的是3个字节。
复合类型
元祖类型
let tup: (i32, f64, u8) = (500, 6.4, 1); #定义
let tup = (500, 6.4, 1);
let (x, y, z) = tup;
println!("The value of y is: {}", y); //6.4
let x: (i32, f64, u8) = (500, 6.4, 1);
// 通过下标获取某个元素
let five_hundred = x.0; //500
let six_point_four = x.1; //6.4
let one = x.2; // 1
元祖类型定义好之后是不可变长,不可以修改的。他的下标是.+序号。上文中x.0就是元祖的第一个内容。
数组类型
let a = [1, 2, 3, 4, 5];
let months = ["January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December"];
let a: [i32; 5] = [1, 2, 3, 4, 5]; //定义i32类型的数组,长度为5
let first = a[0]; //数组的下标
let second = a[1];
let n = a[6]; //这里会报错,越界了