Rust - 数据类型

本文介绍了Rust语言的特性,包括其对静态类型的严格要求,以及标量类型(整数、浮点、字符、布尔)和复合类型(元组和数组)的详细说明。重点讲解了类型标注、整数溢出、浮点精度、字符编码和数组/动态数组的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Rust 是静态编译语言,在编译时必须知道所有变量的类型。

基于使用的值,编译器通常能推断出它的具体类型,但如果可能的类型比较多,例如把String转换为整数的parse方法,就必须添加类型的标注,否则编译会报错。

//报错:程序不知道把字符串转换成啥类型
let guess = "42".parse().expect("Not a number");
//正确:程序知道要转换成u32类型
let guess:u32 = "42".parse().expect("Not a number");

在rust中,每个值都有其确切的数据类型,总的来说可以分为两类:标量类型和复合类型。

一个标量类型意味着它代表的是一个单个的值,rust有三个主要的标量类型:

  • 数值类型: 有符号整数 (i8, i16, i32, i64, isize)、 无符号整数 (u8, u16, u32, u64, usize) 、浮点数 (f32, f64)
  • 布尔类型: true和false
  • 字符类型: 表示单个 Unicode 字符,存储为 4 个字节

复合类型,顾名思义,是指由多个标量类型的值和其他符号组合而成的数据类型

Rust内置的复合类型有:元组、数组。

一、标量类型

(一)整数类型

比如 i32 类型(rust默认的整数值类型),表示的就是有符号的 32 位整数类型( i 是英文单词 integer 的首字母,与之相反的是 u,代表无符号 unsigned 类型)。下表显示了 Rust 中的内置的整数类型:

长度(视架构而定) 有符号类型 无符号类型
8 位 i8 u8
16 位 i16 u16
32 位 i32 u32
64 位 i64 u64
arch(架构位数,如128) isize(i128) usize(u128)

类型定义的形式统一为:有无符号 + 类型大小(位数)。无符号数表示数字只能取正数和0,而有符号则表示数字可以取正数、负数还有0。就像在纸上写数字一样:当要强调符号时,数字前面可以带上正号或负号;然而,当很明显确定数字为正数时,就不需要加上正号了。有符号数字以补码形式存储。

每个有符号类型规定的数字范围是 -(2n - 1) ~ 2n - 1 - 1,其中 n 是该定义形式的位长度。因此 i8 可存储数字范围是 -(27) ~ 27 - 1,即 -128 ~ 127。无符号类型可以存储的数字范围是 0 ~ 2n - 1,所以 u8 能够存储的数字为 0 ~ 28 - 1,即 0 ~ 255。

整数溢出

例如:u8的范围是0-255,如果你把一个u8变量的值设为256,那么

  1. 在调试模式下:rust会检查整数溢出,如果发生溢出,程序在运行时会报错。
  2. 在发布模式下(–release):rust不会检查可能导致报错的整数溢出。如果溢出发生,会执行“环绕”操作,就像一个钟表一样转圈,将256变成0,257变成1…以此类推,且不会报错。

(二)浮点类型

浮点类型数字 是带有小数点的数字,在 Rust 中浮点类型数字也有两种基本类型: f32 和 f64,分别为 32 位和 64 位大小。默认浮点类型是 f64,在现代的 CPU 中它的速度与 f32 几乎相同,但精度更高。

下面是一个演示浮点数的示例:

fn main() {
   
    let x = 2.0; // f64
    let y: f32 = 3.0; // f32
}

浮点数根据 IEEE-754 标准实现。f32 类型是单精度浮点型,f64 为双精度。

(三)字符类型

Rust 的 char 类型是语言中最原生的字母类型。下面是一些声明 char 值的例子:

fn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值