Rust 数据类型

news/2024/9/19 2:16:27/ 标签: 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-biti8u8
16-biti16u16
32-biti32u32
64-biti64u64
128-biti128u128
archisizeusize
  • 有符号整数:支持负数和正数,例如 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; // f64let 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]; // 这将导致 panicprintln!("The value of element is: {}", element);
}

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

3. 总结

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


http://www.ppmy.cn/news/1525863.html

相关文章

AI大模型与产品经理:替代与合作的深度剖析

在创业的征途中,产品经理常常被外界以一种半开玩笑的口吻提及:“就差一个程序员了。”这句话背后,既蕴含着对产品经理创意与策略能力的认可,也揭示了技术实现环节对于产品成功不可或缺的重要性。然而,随着AI技术的飞速…

【C++题解】1406. 石头剪刀布?

欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1406. 石头剪刀布? 类型:二维数组 题目描述: 石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出…

Facebook的虚拟现实计划:未来社交的全新视角

随着科技的不断进步,虚拟现实(VR)正逐步成为我们日常生活的一部分。作为全球领先的社交平台,Facebook正在大力投入虚拟现实技术,以重新定义社交互动的方式。本文将深入探讨Facebook的虚拟现实计划,分析其如…

用Python-pptx定制你的形状效果

哈喽,大家好,我是木头左! 本篇文章将深入探讨如何使用Python-pptx来形状属性,包括颜色、边框和效果,让你的PPT设计更上一层楼。 准备工作:安装和导入python-pptx 首先确保你已经安装了python-pptx库。如果没有,可以通过pip安装: pip install python-pptx安装完成后,…

[数据集][目标检测]河道垃圾检测数据集VOC+YOLO格式2274张8类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2274 标注数量(xml文件个数):2274 标注数量(txt文件个数):2274 标注…

Python编码系列—Python抽象工厂模式:构建复杂对象家族的蓝图

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

汽车EDI:montaplast EDI对接

Montaplast 是一家总部位于德国的全球知名汽车零部件供应商,专注于高精度塑料部件的设计、开发和生产。公司成立于1958年,主要为汽车行业提供轻量化、高性能的塑料解决方案。Montaplast 以其在注塑成型技术、表面处理和装配技术方面的专业能力而著称&…

Java在零工市场中的应用:构建灵活高效的劳动力平台

随着数字经济的迅猛发展,零工经济作为一种新兴的劳动力市场模式,正在全球范围内迅速崛起。零工市场通过互联网平台将服务提供者与需求者进行快速匹配,使得个人可以临时、自由地提供服务,企业则能够按需雇佣劳动力,实现…

【VUE】11、安装nvm管理多个版本的node.js

1、简介 nvm 全称为 Node Version Manager,即 Node.js 版本管理器。它是一个用于在同一台机器上管理多个 Node.js 版本的工具。通过 nvm,用户可以轻松地安装、切换、卸载不同版本的 Node.js,而无需担心版本冲突或环境变量配置问题。这使得开…

大模型的实践应用29-大语言模型的RLHF(人类反馈强化学习)的具体应用与原理介绍

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用29-大语言模型的RLHF(人类反馈强化学习)的具体应用与原理介绍。在当今人工智能发展的浪潮中,大语言模型(Large Language Models, LLMs)凭借其强大的语言理解和生成能力,成为了研究与应用的热点。而在这股浪潮中,一…

tcp、http和rpc

tcp是传输层协议,http和rpc是应用层协议。http和rpc的底层都是tcp。tcp三大特点:面向连接、可靠、基于字节流。纯tcp发送的消息是基于字节流,无边界的,接收方不知道哪些字节是一条完整的消息。所以,tcp不能直接使用。可…

Kubernetes (k8s)v1.27.1版本安装步骤

这 一、k8s 安装步骤1.1 安装docker及containerd容器1.2、设置每台服务器的参数1.3、安装kubelet、kubeadm、kubectl1.4、修改 kubelet 的 cgroup 和 docker 的 cgroup-driver 保持一致1.5、使用containerd 默认容器的配置1.6、使用kubeadm进行初始化1.7、初始化成功1.8、集群部…

【JavaSE】Java基本数据类型缓存池

new Integer(18) 、 Integer.valueOf(18) 、Integer.valueOf(300) 的区别 new Integer(18) :每次都会创建一个新对象Integer.valueOf(x): x in [-128, 127]:使用缓存池中的对象x not in [-128, 127]:创建新对象 Integer缓存池大…

康谋分享 | 汽车仿真与AI的结合应用

在自动驾驶领域,实现高质量的虚拟传感器输出是一项关键的挑战。所有的架构和实现都会涉及来自质量、性能和功能集成等方面的需求。aiSim也不例外,因此我们会更加关注于多个因素的协调,其中,aiSim传感器实现的神经网络渲染仿真方案…

C++20 新特征:Ranges库初探

引言 C20引入了多个令人兴奋的新特性,其中最为突出的是Ranges库。Ranges库是标准模板库(STL)的重要扩展,旨在简化和优化序列数据的处理。本文将深入浅出地介绍Ranges库的核心组件及其对C编程带来的改进。 什么是Ranges库&#x…

【nginx】ngx_http_proxy_connect_module 正向代理

50.65无法访问 服务器, (403 错误) 50.196 可以访问服务器。 那么,配置65 通过196 访问。 需要一个nginx作为代理 【nginx】搭配okhttp 配置反向代理 发送原生的nginx是不支持okhttp的CONNECT请求的。 大神竟然给出了一个java工程 GINX编译ngx_http_proxy_connect_module及做…

计算机毕业设计选题推荐-勤工俭学兼职系统-助学兼职系统-Java/Python项目实战(亮点:手机验证码验证+数据可视化)

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

MySQL权限控制(DCL)

我的mysql里面的一些数据库和一些表 基本语法 1.查询权限 show grants for 用户名主机名;例子1:查询权限 show grants for heima%;2.授予权限 grant 权限列表 on 数据库名.表名 to 用户名主机名;例子2: 授予权限 grant all on itcast.* to heima%;…

阿里短信服务+Redis创建定时缓存

在这一章进行的操作是在java中引入阿里云的短信服务接口,在发送短信的时候将短信存进Redis缓存数据库中并且对缓存数据添加倒计时为五分钟 首先 找到阿里云服务的短信服务 例: 【三网106短信】短信接口-短信验证码-短信通知-数字藏品短信-短信API_支持转网_自定义签名模板-A…

CSP程序填空专项练习

已放在资源中,欢迎大家下载,距离初赛还有5天,祝大家成功!