Rust 数据类型

我们在 Rust 中使用数据类型来确定与变量相关联的数据的类型。例如:

let alphabet: char;

在这里,char 是数据类型,它指定 alphabet 变量只能存储字符数据。


Rust 中的数据类型

Rust 中有四种主要的数据类型,也称为标量类型

  • 整数
  • 浮点数
  • 布尔型
  • 字符

1. 整数类型

在 Rust 中,我们使用整数数据类型来存储整数。例如:

let number: i32 = 200;

在这里,我们创建了一个类型为 i32(整数)的 number 变量,并存储了值 200

整数类型 i32 有两个组成部分:

  • i - 指定有符号整数类型(可以存储正值或负值)
  • 32 - 数据类型的大小(在内存中占用 32 位空间)

Rust 中的有符号整数类型

fn main() {
    // Signed integer type 
    let x: i32 = -200;
    let y: i32 = 200;

    println!("x = {}", x);
    println!("y = {}", y);
}

输出

x = -200
y = 200

在这里,我们定义了两个整数 xy,它们的值分别为 -200200,并将它们打印到屏幕上。

无符号整数类型

我们还可以创建只能存储正整数值的变量。例如:

fn main() {
    // Unsigned integer type
    let x: u32 = 300;

    println!("x = {}", x);
}

输出

x = 300

在这里,u32 指定 x 变量只能存储正值。u 指定无符号整数类型。

如果我们尝试将负数存储到 u32 类型变量中,我们会收到一个错误。例如:

fn main() {
    let x: u32 = -200;

    println!("x = {}", x);
}

错误

error[E0600]: cannot apply unary operator `-` to type `u32`
 --> main.rs:2:18
  |
2 |   let x: u32 = -200;
  |                ^^^^ cannot apply unary operator `-`
  |
  = note: unsigned values cannot be negated

Rust 中整数数据类型的类别

根据数据的大小,我们可以将有符号和无符号整数类型进一步分为不同类别

大小 有符号 无符号
8 位 i8 u8
16 位 i16 u16
32 位 i32 u32
64 位 i64 u64
128 位 i128 u128

2. Rust 浮点数类型

浮点数类型用于存储小数(带小数点的数字)。在 Rust 中,浮点数数据类型可分为:

  • f32
  • f64

在这里,f 字符表示浮点数,3264 表示位数。

让我们看一个例子:

let x: f32 = 3.1;

在这里,f32 是浮点值的类型声明。在这种情况下,x 被赋值为浮点值 3.1


示例:浮点数数据类型

fn main() {
    // f32 floating point type
    let x: f32 = 3.1;

    // f64 floating point type
    let y: f64 = 45.0000031;

    println!("x = {}", x);
    println!("y = {}", y);
}

输出

x = 3.1
y = 45.0000031

注意: f32 是单精度浮点类型,而 f64 是双精度类型。使用双精度时,f64 可以存储更大十进制范围的数据,并且被认为更精确。


3. Rust 布尔类型

在 Rust 中,布尔数据类型可以有两个可能的值:truefalse。例如:

// boolean value true
let flag1: bool = true;

// boolean value false
let flag2: bool = false;

在这里,我们使用了 bool 关键字来表示 Rust 中的布尔类型。


示例:布尔类型

fn main() {
    // boolean type
    let flag1: bool = true;
    let flag2: bool = false;

    println!("flag1 = {}", flag1);
    println!("flag2 = {}", flag2);
}

输出

flag1 = true
flag2 = false

注意: 布尔值经常在条件语句中使用,例如 if/else 表达式。


4. Rust 字符类型

Rust 中的字符数据类型用于存储单个字符。例如:

fn main() {
    // char type
    let character: char = 'z';

    println!("character = {}", character);
}

输出

character = z

在这里,char 表示字符类型变量,我们使用单引号来表示一个字符。

我们还可以使用字符类型存储特殊字符,如 $@& 等。例如:

fn main() {
    // char type
    let character: char = 'z';
    let special_character: char = '$';

    println!("character = {}", character);
    println!("special_character = {}", special_character);
}

输出

character = z
special_character = $

注意:我们也可以使用单引号将数字存储为字符。例如:

let numeric_character: char = '5';

在这里,'5' 不是整数,它是一个字符,因为我们将其括在单引号中。


Rust 中的类型推断

到目前为止,我们在变量声明时都提到了数据类型。但是,在 Rust 中,我们可以创建变量而不提及数据类型。例如:

let x = 51;

在这种情况下,Rust 通过查看变量 x 的值自动识别数据类型,并将其与变量关联。这个过程称为类型推断

让我们看一个例子,

fn main() {
    let x = 51;

    println!("x = {}", x);
}

输出

x = 51

在这里,您可以看到我们没有提及 x 变量的数据类型。这是因为 Rust 将根据值 51 自动将 i32 设置为类型(整数变量的默认类型)。

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战