Rust 数据类型
文章目录
- 发现宝藏
- 1. 标量类型
- 1.1 整型
- 1.2 浮点型
- 1.3 布尔型
- 1.4 字符型
- 2. 复合类型
- 2.1 元组
- 2.2 数组
- 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。 isize和usize:它们的大小依赖于计算机的架构(64 位或 32 位),通常用于数组索引等场景。
1.1.1整型字面值
Rust 支持不同形式的整型字面值:
- 十进制:
98_222 - 十六进制:
0xff - 八进制:
0o77 - 二进制:
0b1111_0000 - 字节(仅限
u8):b'A'
1.1.2整型溢出
Rust 在 debug 模式下会检查整型溢出,并导致程序 panic。在 release 模式下,Rust 会进行二进制补码包装(即溢出回绕),使得溢出后的值重新从 0 开始。如果需要显式处理溢出,可以使用 Wrapping 类型。
1.2 浮点型
Rust 提供两种浮点型,分别为 f32 和 f64:
f32:单精度浮点数,占用 32 位。f64:双精度浮点数,占用 64 位,提供更高的精度。
浮点数采用 IEEE-754 标准表示,通常情况下 f64 是默认的浮点数类型,因为它的精度较高,但在性能上与 f32 相似。
fn main() {let x = 2.0; // f64let y: f32 = 3.0; // f32
}
1.3 布尔型
Rust 的布尔类型用 bool 表示,只有两个值:true 和 false。布尔值常用于条件判断和控制流。
fn main() {let t = true;let f: bool = false;
}
1.4 字符型
Rust 的字符类型用 char 表示,每个字符占用 4 个字节,并代表一个 Unicode 标量值。这意味着它可以表示比 ASCII 更多的字符,如拼音、中文、日文、emoji 等。
fn main() {let c = 'z';let z = 'ℤ';let heart_eyed_cat = '😻';
}
2. 复合类型
复合类型可以将多个值组合成一个类型。Rust 的复合类型包括:
- 元组(Tuple)
- 数组(Array)
2.1 元组
元组是一种将多个值组合成一个复合类型的方式,元组中的值可以是不同的类型。元组的长度是固定的,不能动态增加或减少。
fn main() {let tup: (i32, f64, u8) = (500, 6.4, 1);let (x, y, z) = tup;println!("The value of y is: {}", y);
}
元组可以通过模式匹配解构,或者通过索引访问其中的元素:
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 中的数组具有固定长度,一旦声明其长度就不能改变。
fn main() {let a = [1, 2, 3, 4, 5];let first = a[0];let second = a[1];
}
数组的类型可以通过指定元素类型和长度来标注,例如:
let a: [i32; 5] = [1, 2, 3, 4, 5];
let b = [3; 5]; // 创建一个所有元素都为 3 的数组
2.2.1访问数组元素
可以通过索引来访问数组元素,但需要注意索引超出范围时会导致程序 panic:
fn main() {let a = [1, 2, 3, 4, 5];let index = 10;let element = a[index]; // 这将导致 panicprintln!("The value of element is: {}", element);
}
Rust 会在运行时检查数组索引的有效性,避免无效内存访问。
3. 总结
Rust 的数据类型分为标量类型和复合类型。标量类型包括整型、浮点型、布尔型和字符型,复合类型包括元组和数组。理解和正确使用这些数据类型是编写健壮 Rust 代码的基础。Rust 的静态类型系统和严格的检查机制帮助程序员在编译时捕捉潜在的错误,从而提升代码的安全性和稳定性。
相关文章:
Rust 数据类型
文章目录 发现宝藏1. 标量类型1.1 整型1.2 浮点型1.3 布尔型1.4 字符型 2. 复合类型2.1 元组2.2 数组 3. 总结 发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 Rust 是一种静态…...
C#无标题栏窗体拖动
要实现C#无标题栏窗体的拖动功能,可以通过以下步骤实现: 在窗体的构造函数中添加以下代码,以去掉标题栏: this.FormBorderStyle FormBorderStyle.None;然后,添加以下代码以处理鼠标按下事件: private c…...
MySQL容器配置连接数数,镜像重启生效
若有不理解,可以问一下这几个免费的AI网站 https://ai-to.cn/chathttp://m6z.cn/6arKdNhttp://m6z.cn/6b1quhhttp://m6z.cn/6wVAQGhttp://m6z.cn/63vlPw 方法一 在 docker-compose.yml 中配置 MySQL 的连接数,可以通过环境变量或配置文件来实现。以下…...
《OpenCV计算机视觉》—— 身份证号码识别案例
文章目录 一、案例实现的整体思路二、代码实现1.首先定义两个函数2.模板图像中数字的定位处理3.身份证号码数字的定位处理4.使用模板匹配,计算匹配得分,找到正确结果 一、案例实现的整体思路 下面是一个数字0~9的模板图片 案例身份证如下: 对…...
如何使用正则表达式替换字符串中的特定位置数字
如何使用正则表达式替换字符串中的特定位置数字 1、效果 把字符串中的第一个123替换掉: 2、代码 使用正则中的sub函数: re.sub(pattern,repl,string,count=0,flags=0) pattern:表示需要匹配的模式,即需要被替换的字符或字符串。 repl:表示替换后的字符串或函数,用于…...
【SQL】在SQL中,行转列
在SQL中,行转列通常是指将数据从水平方向(行)转换为垂直方向(列),这可以通过使用CASE语句或数据库特有的函数如PIVOT(在SQL Server中)来实现。下面我将通过一个具体的例子来说明如何…...
95. UE5 GAS RPG 实现创建多段飞弹攻击敌人
从这篇开始,我们将实现一些技能,比如多段火球术,闪电链等等。 在这一篇里,我们先实现多段火球术,技能可以通过配置发射出多个火球术进行攻击。 创建多段火球函数 首先在我们之前创建的RPGFireBolt.h类里面增加一个生…...
分布式集群下如何做到唯一序列号
优质博文:IT-BLOG-CN 分布式架构下,生成唯一序列号是设计系统常常会遇到的一个问题。例如,数据库使用分库分表的时候,当分成若干个sharding表后,如何能够快速拿到一个唯一序列号,是经常遇到的问题。实现思…...
在 Vue 2 中使用 Axios 发起 POST 和 GET 请求
Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js,它提供了一种非常方便的方式来发送异步 HTTP 请求。在 Vue 2 应用中,Axios 可以帮助我们轻松地与后端 API 进行通信。本文将介绍如何在 Vue 2 项目中引入 Axios,并…...
Linux内核初始化过程中加载TCP/IP协议栈
Linux内核初始化过程中加载TCP/IP协议栈 Linux内核初始化过程中加载TCP/IP协议栈,从start_kernel、kernel_init、do_initcalls、inet_init,找出Linux内核初始化TCP/IP的入口位置,即为inet_init函数。 Linux内核启动过程 之前的实验中我们设…...
Mysql树形结构表-查询所有子集数据
表结构,这里只是个例子,所有的树形结构表均可用: CREATE TABLE zhkt_course_chapter (id bigint NOT NULL COMMENT 唯一id,course_id bigint NOT NULL COMMENT 所属课程id,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general…...
Vue 3 Composition API进阶指南
在上一篇文章中,我们介绍了Vue 3的Composition API基础,包括如何使用setup函数、ref和reactive来创建响应式数据,以及使用watchEffect来监控数据变化。本文将继续深入探讨Composition API的高级用法,帮助你更好地理解和利用Vue 3的…...
C++学习,多继承
多继承,一个子类可以有多个父类,它继承了多个父类的特性。这种机制提供了强大的灵活性,但也带来了复杂性,特别是当涉及到基类中的同名成员(包括成员函数和变量)时。 C 类从多个类继承成员,语法如…...
苹果研究人员提出了一种新颖的AI算法来优化字节级表示以自动语音识别(ASR),并将其与UTF-8表示进行比较
端到端(E2E)神经网络已成为多语言自动语音识别(ASR)的灵活且准确的模型。然而,随着支持的语言数量增加,尤其是像中文、日语、韩语(CJK)这样大字符集的语言,输出层的大小显…...
2024年重磅报告!国内AI大模型产业飞速发展!
伴随人工智能技术的加速演进,AI 大模型已成为全球科技竞争的新高地、未来产业的新赛道、经济发展的新引擎,发展潜力大、应用前景广。近年来,我国高度重视人工智能的发展,将其上升为国家战略,出台一系列扶持政策和规划&…...
Sentinel 安装
一、下载jar包 下载地址:Releases alibaba/Sentinel GitHub 二、运行 将jar包放在任意非中文、不包含特殊字符的目录下,启动 启动命令:运行cmd 使用一下命令 java -Dserver.port8090 -Dcsp.sentinel.dashboard.serverlocalhost:8090 -D…...
大佬,简单解释下“嵌入式软件开发”和“嵌入式硬件开发”的区别
在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!首先,嵌入式硬…...
04 奇偶分家
题目: 代码: #include<iostream> using namespace std; #include<stdlib.h> #include<stdio.h>int main() {int N;cin>>N;int jicount0,oucount0;for(int i0;i<N;i){int temp;cin>>temp;if(temp%20){oucount;}else if…...
普通人秒变AI专家:李沐创业同款RAG微调实战,打造专属外卖评论大模型
8月14日晚上,李沐发布了一篇关于他创业一年的复盘文章《创业一年,人间三年》,引起了广泛关注。这篇文章中,李沐分享了从创业初期到现在的心路历程,许多读者读后都倍感激动。 创业之初,李沐的团队原本打算利用大语言模型(LLM)开发生产力工具。然而,在张一鸣的建议下,…...
微模块冷通道动环监控:智能化数据中心管理利器@卓振思众
在现代数据中心和机房管理中,微模块冷通道动环监控系统的引入,标志着对冷却和环境管理的新纪元。这一系统不仅提升了数据中心的运维效率,还对设备的安全性和稳定性提供了强有力的保障。本文将详细探讨微模块冷通道动环监控的功能和其在数据中…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...
Java数组Arrays操作全攻略
Arrays类的概述 Java中的Arrays类位于java.util包中,提供了一系列静态方法用于操作数组(如排序、搜索、填充、比较等)。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序(sort) 对数组进行升序…...
