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 的静态类型系统和严格的检查机制帮助程序员在编译时捕捉潜在的错误,从而提升代码的安全性和稳定性。

相关推荐
开心工作室_kaic10 分钟前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it12 分钟前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康17 分钟前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
qq_174482857540 分钟前
springboot基于微信小程序的旧衣回收系统的设计与实现
spring boot·后端·微信小程序
转世成为计算机大神1 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
宅小海1 小时前
scala String
大数据·开发语言·scala
qq_327342731 小时前
Java实现离线身份证号码OCR识别
java·开发语言
锅包肉的九珍1 小时前
Scala的Array数组
开发语言·后端·scala
心仪悦悦1 小时前
Scala的Array(2)
开发语言·后端·scala
yqcoder2 小时前
reactflow 中 useNodesState 模块作用
开发语言·前端·javascript