04_rust的数据类型

发布时间 2023-10-12 00:41:22作者: UFOFCZ

数据类型

有 标量和复合类型
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