Rust篇章四:数据类型

86 阅读3分钟

Rust 是一种静态类型语言,这意味着它必须在编译时知道所有变量的类型。编译器通常可以根据值以及我们如何使用它来推断我们想要使用什么类型。在可能有多种类型的情况下,必须添加类型注释。

Rust 有四种主要类型:整数、浮点数、布尔值和字符

整数类型:

Rust的默认整数类型为i32。

有符号类型表示范围:-(2n1)(2^{n-1})2n12^{n-1} -1
无符号类型表示范围:0到 2n2^n-1

LengthSignedUnsigned
8-biti8u8
16-biti16u16
32-biti32u32
64-biti64u64
128-biti128u128
archisizeusize

举例说明:
i8表示范围为: -(281)(2^{8-1})2812^{8-1} -1, 即-128到127
u8表示范围为: 0 到 2n2^n-1,即0到255

isizeusize类型取决于您的程序运行的计算机类型:如果您采用 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有两个可能的值:truefalse,大小为一字节。

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

image.png

OK! 到此为止。

参考文章:

rust技术手册