news 2026/7/23 18:46:27

【Rust自学】3.2. 数据类型:标量类型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Rust自学】3.2. 数据类型:标量类型

3.2 数据类型:标量类型

3.2.0. 写在正文之前

欢迎来到Rust自学的第三章,一共有6个小节,分别是:
- 变量与可变性
-数据类型:标量类型(本文)
- 数据类型:复合类型
- 函数和注释
- 控制流:if else
- 控制流:循环

通过第二章的小游戏(没看的初学者强烈建议看一下),相信你已经学会了基本的Rust语法,而在第三章我们将更深一层,了解Rust中的通用的编程概念。

3.2.1. Rust中的变量特性

Rust是静态编译语言,因此编译器在编译时必须知道每个变量的类型。
- 基于使用的值,编译器通常能够推断出它的具体类型。
- 如果可能的类型比较多,就必须添加类型标注,否则编译会失败。以下是一个例子:

let guess = "6657".parse().expect("Please enter a number");

如果你把这句话放到IDE中,你就会发现类似error[E0284]: type annotations needed的错误。这是因为字符串6657可以被解析成i32u32等类型,编译器不知道你想要哪一种,所以需要显式标注类型。将代码改成如下即可编译通过:

let guess: u32 = "6657".parse().expect("Please enter a number");

3.2.2. 标量类型的简介

  • 一个标量类型代表一个单一的值。
  • Rust主要有4个标量类型:
  • 整数类型
  • 浮点类型
  • 布尔类型
  • 字符类型

3.2.3. 整数类型

  • 无符号整数类型(不能表示负数)以u开头,u是unsigned的简写。
  • 有符号整数类型(可以表示负数)以i开头,i是integer的简写。
  • 字母后的数字表示该类型占据多少位。例如,u32中的32表示它使用32位,能表示从02^32 - 1的值。
  • Rust的整数类型列表如下:
  • 每种都分iu,以及固定的位数。
  • 有符号范围:-(2^(n-1))2^(n-1) - 1
  • 无符号范围:02^n - 1
LengthSignedUnsigned
8-biti8u8
16-biti16u16
32-biti32u32
64-biti64u64
128-biti128u128
archisizeusize

isizeusize类型是比较特殊的两个整数类型,其大小由程序运行的计算机架构所决定:
- 在64位机器上,它们是64位。isize相当于i64usize相当于u64
- 在32位机器上,它们是32位。isize相当于i32usize相当于u32

使用isizeusize的主要场景是对某种集合进行索引操作。

fn main(){ let machine: u32 = 6657; }

3.2.4. 整数字面值

整数不一定是十进制的,也支持其他进制。使用固定格式能让程序理解你使用的进制,也使别人更容易读懂你的代码。

Number literalsExample
Decimal98_222
Hex0xff
Octal0o77
Binary0b1111_0000
Byte (u8 only)b'A'
  • 十进制中可以加上下划线来增强可读性。
  • 十六进制以0x开头。
  • 八进制以0o开头。
  • 二进制以0b开头,也可以加上下划线来增强可读性。
  • 字节字面值比较特殊。在Rust中,字节整数字面值写作b'X',其中X是表示一个字节值的单个字符。这种字面值只能用于u8,因为字节值的范围是0到255,且X必须是ASCII字符。例如,b'A'的值是65,因为A的ASCII码是65。
  • 除了字节字面值,所有数值字面值都可以使用类型后缀。
  • 如果不太清楚该使用哪种类型,可以依赖Rust相应的默认类型。
  • 整数的默认类型是i32,总体上来说速度很快,即使是在64位系统中。

3.2.5. 整数溢出

举个例子,u8的范围是0到255。如果把一个u8变量的值设为256,会出现两种情况:
- 在调试构建中,Rust会检查溢出。如果发生溢出,程序会在运行时panic。
- 在发布构建(--release)中,Rust不会检查可能导致panic的溢出。
- 如果确实发生溢出,Rust会执行环绕运算:256变成0,257变成1,以此类推,但不会panic。

3.2.6. 浮点类型

Rust有两种基础的浮点类型:
-f32:32位单精度
-f64:64位双精度

Rust使用IEEE-754标准来表示浮点类型。

f64是默认类型,因为在现代CPU中,f64的运行速度与f32差不多,而且f64精度更高。

fn main(){ let machine: f32 = 6657.0721; }

3.2.7. 数值操作

  • 加:+
  • 减:-
  • 乘:*
  • 除:/
  • 余:%
    这些与其他语言无异。

3.2.8. 布尔类型

Rust的布尔类型与其他语言无异。它有两个值:truefalse,占一个字节,关键字是bool

fn main(){ let machine: bool = true; }

3.2.9. 字符类型

  • Rust的char类型用来表示语言中最基础的单个字符。
  • 字符字面值使用单引号。
  • 占用4个字节。
  • 它是Unicode标量值,因此可以表示远超ASCII的内容,包括拼音、中日韩文、零宽字符、emoji等。其范围是从U+0000U+D7FF以及从U+E000U+10FFFF
  • Unicode实际上并没有我们通常理解的那种“字符”概念,所以直觉上认识的字符也许与Rust中的概念并不完全对应。
fn main(){ let x: char = '🥵'; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/23 18:45:27

基于ddddocr与Hu矩的验证码识别技术实践

1. 项目背景与需求分析验证码识别一直是自动化测试和爬虫开发中的难点问题。某象验证码作为业内知名的验证码服务提供商,其差异点击验证码通过动态生成干扰元素和随机位置点击点,给传统OCR识别带来了巨大挑战。这类验证码通常包含以下特征:随…

作者头像 李华
网站建设 2026/7/23 18:41:45

工业5G专网切片架构与末端节点高EMC抗干扰设计实战指南

摘要:随着工信部等八部门联合印发《关于推动工业互联网高质量发展的实施意见》,建设5万张工业5G专网与培育5G分级工厂成为全行业最核心的技术演进议题。在极其复杂的强电磁、高反射、NLOS(非视距)工业现场,传统的无线数…

作者头像 李华
网站建设 2026/7/23 18:41:38

Hercules微控制器ECC安全机制:从原理到实战的嵌入式数据保护

1. 项目概述与核心价值在汽车电子、工业控制这些对可靠性要求近乎苛刻的领域,一个随机的比特翻转都可能导致灾难性后果。想象一下,一辆高速行驶的汽车,其发动机控制单元(ECU)因为宇宙射线或电磁干扰导致内存中一个关键…

作者头像 李华
网站建设 2026/7/23 18:40:28

GLM-5 DSA稀疏注意力技术解析与应用实践

1. GLM-5 DSA稀疏注意力技术核心解析 在2026年大模型技术迭代中,GLM-5采用的DSA(DeepSeek Sparse Attention)架构成为降低部署成本的关键突破。与传统密集注意力机制相比,该技术通过动态token筛选将计算复杂度从O(L)降至近似线性&…

作者头像 李华
网站建设 2026/7/23 18:39:40

基于YOLOv8的牙齿健康检测系统开发全流程

1. 项目概述:基于YOLOv8的牙齿健康检测系统这个开源项目提供了一个完整的牙齿健康状态检测解决方案,从数据集标注到模型训练再到Web前端展示的全套流程。系统采用当前最先进的YOLOv8目标检测算法,并针对牙齿检测任务进行了70项改进创新点优化…

作者头像 李华
网站建设 2026/7/23 18:32:14

软路由安装openwrt

软路由安装openwrt创建虚拟机下一步填写虚拟机名称,设置虚拟机系统下一步配置虚拟机详细配置添加硬盘选择现有硬盘创建系统文件存放目录命名目录名上传系统文件到Openwrt目录两个文件都要分别上传两个文件都上传后显示如下一个虚拟机文件选择Openwrt虚拟机文件下一步…

作者头像 李华