数据类型
有 标量和复合类型
rust是静态编译语言,需在编译时知道所有变量的类型。
1)通常基于变量上下文使用的值,编译器能推断出具体类型。
2)若可能的类型存在多种,则需手动标注,如下例子。
let d: u32 = "56".parse().expect("not a num"); // 因为可转换的类型很多,如果不指定类型会编译报错
标量类型
一个标量类型代表一个单个的值
rust有四个主要的标量类型:
- 整数类型
- 浮点类型
- 布尔类型
- 字符类型
整数类型
整数,如u32为无符号32位整数类型,无符号u开头,有符号i开头。
数据范围:有符号 -(2^n-1) ~ 2^(n-1)-1,无符号 0 ~ 2^n -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 |
注:isize和usize由程序运行的计算机架构决定,如果时32位机是32位的,如果是64位机是64位的。
整数字面值
| Num literals | example |
|---|---|
| Decimal | 10_999 (可用下划线间隔增加可读性) |
| Hex | 0xff |
| Octal | 0o77 |
| Binary | 0b1111_0000 |
| Bite(u8 only) | b'A' |
除了byte类型外,所有数值字面值都允许使用 类型后缀,如255u8。不加后缀则会有默认类型。
整数的默认类型是i32,特点是计算速度快,在64位系统中也是。
整数溢出
如u8的范围是0-255,如赋值成256,则:
- 1)调试模式下,rust会检查整数溢出,若溢出会在运行时panic。
- 2)发布模式下(加-release编译),rust不会检查导致panic的溢出。这时若溢出则超过的高位丢失,发生环绕操作,256为0,257为1,程序能正常运行,不会panic。
浮点类型
两种浮点类型:
- f32,32位,单精度
- f64,64位,双精度
rust的浮点类型使用了IEEE-754标准来描述。
f64是默认类型,因当下cpu处理f64和f32速度差不多,且精度更高。
let x = 2.0; // f64
let y: f32 = 3.0; // f32