Rust 数据类型

文章目录

  • 发现宝藏
  • [1. 标量类型](#1. 标量类型)
    • [1.1 整型](#1.1 整型)
    • [1.2 浮点型](#1.2 浮点型)
    • [1.3 布尔型](#1.3 布尔型)
    • [1.4 字符型](#1.4 字符型)
  • [2. 复合类型](#2. 复合类型)
    • [2.1 元组](#2.1 元组)
    • [2.2 数组](#2.2 数组)
  • [3. 总结](#3. 总结)

发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。

Rust 是一种静态类型的编程语言,这意味着在编译时必须知道所有变量的类型。虽然 Rust 能够通过类型推断来自动推导类型,但在某些情况下,程序员仍需要显式地指定数据类型。理解 Rust 的数据类型是编写高效、可靠代码的基础。本文将详细介绍 Rust 的数据类型,涵盖标量类型、复合类型以及如何在实际编程中使用它们。


1. 标量类型

标量类型代表单一值。Rust 中的标量类型包括:

  • 整型(Integer)
  • 浮点型(Floating-Point)
  • 布尔型(Boolean)
  • 字符型(Character)

1.1 整型

整型表示没有小数部分的数字。Rust 提供了多种整型,支持不同的位数和符号类型。以下是 Rust 中的整型类型表:

长度 有符号 无符号
8-bit i8 u8
16-bit i16 u16
32-bit i32 u32
64-bit i64 u64
128-bit i128 u128
arch isize usize
  • 有符号整数 :支持负数和正数,例如 i32 表示一个 32 位的有符号整数,范围从 -2,147,483,648 到 2,147,483,647。
  • 无符号整数 :仅支持非负数,例如 u8 表示一个 8 位的无符号整数,范围从 0 到 255。
  • isizeusize:它们的大小依赖于计算机的架构(64 位或 32 位),通常用于数组索引等场景。

1.1.1整型字面值

Rust 支持不同形式的整型字面值:

  • 十进制98_222
  • 十六进制0xff
  • 八进制0o77
  • 二进制0b1111_0000
  • 字节(仅限 u8b'A'

1.1.2整型溢出

Rust 在 debug 模式下会检查整型溢出,并导致程序 panic。在 release 模式下,Rust 会进行二进制补码包装(即溢出回绕),使得溢出后的值重新从 0 开始。如果需要显式处理溢出,可以使用 Wrapping 类型。

1.2 浮点型

Rust 提供两种浮点型,分别为 f32f64

  • f32:单精度浮点数,占用 32 位。
  • f64:双精度浮点数,占用 64 位,提供更高的精度。

浮点数采用 IEEE-754 标准表示,通常情况下 f64 是默认的浮点数类型,因为它的精度较高,但在性能上与 f32 相似。

rust 复制代码
fn main() {
    let x = 2.0; // f64
    let y: f32 = 3.0; // f32
}

1.3 布尔型

Rust 的布尔类型用 bool 表示,只有两个值:truefalse。布尔值常用于条件判断和控制流。

rust 复制代码
fn main() {
    let t = true;
    let f: bool = false;
}

1.4 字符型

Rust 的字符类型用 char 表示,每个字符占用 4 个字节,并代表一个 Unicode 标量值。这意味着它可以表示比 ASCII 更多的字符,如拼音、中文、日文、emoji 等。

rust 复制代码
fn main() {
    let c = 'z';
    let z = 'ℤ';
    let heart_eyed_cat = '😻';
}

2. 复合类型

复合类型可以将多个值组合成一个类型。Rust 的复合类型包括:

  • 元组(Tuple)
  • 数组(Array)

2.1 元组

元组是一种将多个值组合成一个复合类型的方式,元组中的值可以是不同的类型。元组的长度是固定的,不能动态增加或减少。

rust 复制代码
fn main() {
    let tup: (i32, f64, u8) = (500, 6.4, 1);
    let (x, y, z) = tup;
    println!("The value of y is: {}", y);
}

元组可以通过模式匹配解构,或者通过索引访问其中的元素:

rust 复制代码
fn main() {
    let tup = (500, 6.4, 1);
    let five_hundred = tup.0;
    let six_point_four = tup.1;
    let one = tup.2;
}

2.2 数组

数组是一种固定长度的容器,所有元素类型相同。Rust 中的数组具有固定长度,一旦声明其长度就不能改变。

rust 复制代码
fn main() {
    let a = [1, 2, 3, 4, 5];
    let first = a[0];
    let second = a[1];
}

数组的类型可以通过指定元素类型和长度来标注,例如:

rust 复制代码
let a: [i32; 5] = [1, 2, 3, 4, 5];
let b = [3; 5]; // 创建一个所有元素都为 3 的数组

2.2.1访问数组元素

可以通过索引来访问数组元素,但需要注意索引超出范围时会导致程序 panic:

rust 复制代码
fn main() {
    let a = [1, 2, 3, 4, 5];
    let index = 10;
    let element = a[index]; // 这将导致 panic
    println!("The value of element is: {}", element);
}

Rust 会在运行时检查数组索引的有效性,避免无效内存访问。

3. 总结

Rust 的数据类型分为标量类型和复合类型。标量类型包括整型、浮点型、布尔型和字符型,复合类型包括元组和数组。理解和正确使用这些数据类型是编写健壮 Rust 代码的基础。Rust 的静态类型系统和严格的检查机制帮助程序员在编译时捕捉潜在的错误,从而提升代码的安全性和稳定性。

相关推荐
m0_631270404 分钟前
标准C++(二)
开发语言·c++·算法
Zhen (Evan) Wang4 分钟前
What is the new in C#11?
开发语言·c#
0224号比邻星11 分钟前
[C语言]第十节 函数栈帧的创建和销毁一基础知识到高级技巧的全景探索
c语言·开发语言
martian6651 小时前
学懂C++(六十):C++ 11、C++ 14、C++ 17、C++ 20新特性大总结(万字详解大全)
开发语言·c++·c++20
zhangbin_2371 小时前
【Python机器学习】NLP信息提取——命名实体与关系
开发语言·人工智能·python·深度学习·机器学习·自然语言处理
Kerwin要坚持日更2 小时前
Java小白一文讲清Java中集合相关的知识点(九)
java·开发语言
WZF-Sang4 小时前
Linux权限理解【Shell的理解】【linux权限的概念、管理、切换】【粘滞位理解】
linux·运维·服务器·开发语言·学习
_Power_Y4 小时前
JavaSE:11、内部类
java·开发语言
你可以自己看5 小时前
python的基础语法
开发语言·python
爱编程的小新☆5 小时前
C语言内存函数
c语言·开发语言·学习