当前位置: 首页 > news >正文

Rust学习入门--【7】Rust 数据类型

类型系统 对于任何一门语言都是重中之重,因为它体现了语言所支持的不同类型的值。

类型系统 也是 IT 初学者最难啃的三座大山之一,而类型系统之所以难以理解,主要是没有合适的现成的参考体系。

我们说类型系统 存在的目的,就是 程序在存储或操作某个数之前检查这个数的有效性,这可以保证程序运行时给变量提供的数据不会发生类型错误。

更近一步说,类型系统可以允许编辑器时时报告错误或者自动提示。

Rust 是一个静态的严格数据类型的语言。每个值都有唯一的数据类型,要么是整型,要么是浮点型等等。

标量数据类型

标量数据类型 又称为 基本数据类型。标量数据类型只能存储单个值,例如 10 或 3.14 或 c。

Rust 语言中有四种标量数据类型:

  • 整型
  • 浮点型
  • 布尔类型
  • 字符类型

接下来我们会对每种标量数据类型做一个简单的介绍。

整数型(Integer)

整数型简称整型,就是没有小数点的数字,按照比特位长度和有无符号分为以下种类:

位长度有符号无符号
8-biti8u8
16-biti16u16
32-biti32u32
64-biti64u64
128-biti128u128
archisizeusize

isize 和 usize 两种整数类型是用来衡量数据大小的,它们的位长度取决于所运行的目标平台(CPU架构),如果是 32 位架构的处理器(x86)将使用 32 位位长度整型,在x64机器为64位长度整型。

整数的表述方法有以下几种

进制
十进制98_321、 98321
十六进制0xff
八进制0o77
二进制0b1111_0000
字节(只能表示 u8 型)b’A’

有的整数中间存在一个下划线,这种设计可以让人们在输入一个很大的数字时更容易判断数字的值大概是多少,Rust 语言会在编译时移除数字可读性分隔符 _。

浮点数型(Floating-Point)

Rust 与其它语言一样支持 32 位浮点数(f32)和 64 位浮点数(f64)。默认为 64 位浮点数,因为现代计算机处理器对两种浮点数计算的速度几乎相同,但 64 位浮点数精度更高。

实例

fn main() {let x = 64.0; // f64let y: f32 = 32.0; // f32
}

数学运算

用一段程序反映数学运算:

实例

fn main() {let sum = 5 + 10; // 加let difference = 84.5 - 6.3; // 减let product = 3 * 30; // 乘let quotient = 56.7 / 32.1; // 除let remainder = 76 % 5; // 求余println!("sum = {}", sum);println!("difference = {}", difference);println!("product = {}", product);println!("quotient = {}", quotient);println!("remainder = {}", remainder);
}

结果
在这里插入图片描述

许多运算符号之后加上 = 号是自运算的意思,例如:

sum += 1 等同于 sum = sum + 1。

注意:Rust 不支持 ++ 和 –,因为这两个运算符出现在变量的前后会影响代码可读性,减弱了开发者对变量改变的意识能力。

布尔型

布尔型用 bool 表示,值只能为 truefalse

字符型 char

字符 ,简单的来说,就是字符串的基本组成部分,也就是单个字符或字。

与 C / C++ 不同的是:Rust 使用 UTF-8 作为底层的编码 ,而不是常见的使用 ASCII 作为底层编码。

也就是说,Rust 中的 字符数据类型 包含了 数字、字母、Unicode其它特殊字符

Rust的 char 类型大小为 4 个字节,代表 Unicode标量值,这意味着它可以支持中文,日文和韩文字符等非英文字符甚至表情符号和零宽度空格在 Rust 中都是有效的 char 值。

Unicode 编码的标量值的范围从 U+0000 到 U+D7FF, U+E000 到 U+10FFFF(含)。

注意:由于中文文字编码有两种(GBK 和 UTF-8),所以编程中使用中文字符串有可能导致乱码的出现,这是因为源程序与命令行的文字编码不一致,所以在 Rust 中字符串和字符都必须使用 UTF-8 编码,否则编译器会报错。

实例

fn main() {let special_character = '@'; //defaultlet alphabet:char = 'A';let emoji:char = '😻'; // 笑脸的那个图println!("special character is {}",special_character);println!("alphabet is {}",alphabet);println!("emoji is {}",emoji);
}

结果
在这里插入图片描述

相关文章:

Rust学习入门--【7】Rust 数据类型

类型系统 对于任何一门语言都是重中之重,因为它体现了语言所支持的不同类型的值。 类型系统 也是 IT 初学者最难啃的三座大山之一,而类型系统之所以难以理解,主要是没有合适的现成的参考体系。 我们说类型系统 存在的目的,就是 …...

阅读MySQL必知必会,查缺补漏

MySQL自带数据库 information_schema:是MySQL自带的数据库,主要保持MySQL数据库服务器的系统信息,比如数据库的名称,数据库表的名称,字段名称,存储权限等。 performance_schema:是MySQL系统自…...

MySQL数据库10——多表连接查询

数据如果在多个表里面,需要进行连接查询。 一般在pandas里面merge合并会用到一个索引,按这个索引的规则进行合并叫做有规则的等值连接。若不按规则连接,遍历两两组合的所有可能性,叫做笛卡尔积。 笛卡尔积连接 通常人们都会设置…...

华为OD机试 - 括号检查(Python)| 真题含思路

括号检查 题目 现有一字符串 仅由 (,),{,},[,] 六种括号组成,若字符串满足以下条件之一,则为无效字符串 任意类型的左右括号数量不相等 存在未按正确顺序(先左后右)闭合的括号, 输出括号的最大嵌套深度 若字符串无效则输出 0 0 <= 字符串长度 <= 100000 输入 一个只…...

安全渗透测试中的一款免费开源的超级关键词URL采集工具

安全渗透测试中的一款免费开源的超级关键词URL采集工具。 #################### 免责声明&#xff1a;工具本身并无好坏&#xff0c;希望大家以遵守《网络安全法》相关法律为前提来使用该工具&#xff0c;支持研究学习&#xff0c;切勿用于非法犯罪活动&#xff0c;对于恶意使…...

数据资产管理实践白皮书(6.0版)解读

目录 第一章数据资产管理概述 ( 一 ) 数据资产管理和数据要素的关系...

c/c++开发,无可避免的函数指针使用案例

一、函数指针简介 函数指针是指指向函数而非指向对象的指针。像其他指针一样&#xff0c;函数指针也指向某个特定的类型。函数类型由其返回类型以及形参表确定&#xff0c;而与函数名无关。例如&#xff1a; char* (*pf1)(char * p1,char *p2); 这是一个函数指针&#xff0c;其…...

QT(12)-QThreadPool

1 简介 QThreadPool是Qt框架中的一个类&#xff0c;提供了一组工作线程池。该线程池自动管理一组工作线程&#xff0c;在线程可用时分配任务。使用线程池的主要优点是&#xff0c;它可以减少创建和销毁线程的开销&#xff0c;因为可以重复使用线程。 线程池设计用于场景中&am…...

【Java|golang】1138. 字母板上的路径

我们从一块字母板上的位置 (0, 0) 出发&#xff0c;该坐标对应的字符为 board[0][0]。 在本题里&#xff0c;字母板为board [“abcde”, “fghij”, “klmno”, “pqrst”, “uvwxy”, “z”]&#xff0c;如下所示。 我们可以按下面的指令规则行动&#xff1a; 如果方格存…...

Flink 1.14从简单到源码第三讲

文章目录 1.flink多流操作Api1.1split 分流操作1.2.侧输出流1.3.connect 连接操作1.4.union 操作1.5 coGroup 协同分组1.6 join1.7 broadcast 广播2.process3.并行度和Api3.1 任务提交简单流程3.2 task与算子链4. Flink 时间相关(窗口计算)4.1时间语义(窗口计算)4.2 新版api指定…...

淘宝API接口系列,获取购买到的商品订单列表,卖出的商品订单列表,订单详情,订单物流,买家信息,收货地址列表,买家token

custom自定义API操作buyer_order_list获取购买到的商品订单列表buyer_order_detail获取购买到的商品订单详情buyer_order_express获取购买到的商品订单物流buyer_address_list收货地址列表buyer_address_add添加收货地址buyer_info买家信息buyer_token买家tokenseller_order_li…...

ucos-ii 的任务调度原理和实现

ucosii 任务调度和原理1、ucos-ii 任务创建与任务调度 1.1、任务的创建 当你调用 OSTaskCreate( ) 进行任务的创建的时候&#xff0c;会初始化任务的堆栈、保存cpu的寄存器、创建任务的控制块&#xff08;OS_TCB&#xff09;等的操作&#xff1b; if (OSTCBPrioTbl[prio] (OS_…...

Solon2 开发之容器,七、切面与函数环绕拦截

想要环绕拦截一个 Bean 的函数。需要三个前置条件&#xff1a; 通过注解做为“切点”&#xff0c;进行拦截&#xff08;不能无缘无故给拦了吧&#xff1f;费性能&#xff09;Bean 的 method 是被代理的在 Bean 被扫描之前&#xff0c;完成环绕拦截的注册 1、定义切点和注册环…...

代码随想录第十天(28)

文章目录28. 找出字符串中第一个匹配项的下标看答案KMPnext数组&#xff08;前缀表&#xff09;最长公共前后缀如何计算前缀表前缀表与next数组时间复杂度分析28. 找出字符串中第一个匹配项的下标 莫得思路……好久没做题&#xff0c;都已经忘得差不多了 看答案 其实就是自己…...

循环队列来了解一下!!

笔者在之前的一篇文章&#xff0c;详细的介绍了&#xff1a;队列之单向链表与双向链表的模拟实现&#xff1a;https://blog.csdn.net/weixin_64308540/article/details/128742090?spm1001.2014.3001.5502 感兴趣的各位老铁&#xff0c;可以参考一下啦&#xff01;下面进入循环…...

Idea打包springboot项目war包,测试通过

pom.xml文件 <!--包名以及版本号&#xff0c;这个是打包时候使用&#xff0c;版本可写可不写&#xff0c;建议写有利于维护系统--> <artifactId>tsgdemo</artifactId> <version>0.0.1-SNAPSHOT</version> <!--打包形式--> <packaging&…...

python+django高校师生健康信息管理系统pycharm

管理员功能模块 4.1登录页面 管理员登录&#xff0c;通过填写注册时输入的用户名、密码、角色进行登录&#xff0c;如图所示。 4.2系统首页 管理员登录进入师生健康信息管理系统可以查看个人中心、学生管理、教师管理、数据收集管理、问卷分类管理、疫情问卷管理、问卷调查管理…...

CUDA中的流序内存分配

文章目录CUDA中的流序内存分配1. Introduction2. Query for Support3. API Fundamentals (cudaMallocAsync and cudaFreeAsync)4. Memory Pools and the cudaMemPool_t注意&#xff1a;设备的内存池当前将是该设备的本地。因此&#xff0c;在不指定内存池的情况下进行分配将始终…...

开源、低成本的 Xilinx FPGA 下载器(高速30MHz)

目前主流的Xilinx下载器主要有两种&#xff1a;一种是Xilinx官方出品的Xilinx Platfom Cable USB&#xff0c;还有一个就是Xilinx的合作伙伴Digilent开发的JTAG-HS3 Programming Cable。 JTAG-HS系列最大支持30MHz下载速度&#xff0c;基于FTDI的FT2232方案。 JTAG-HS系列对比…...

Maven专题总结

1. 什么是Maven Maven 是一个项目管理工具&#xff0c;它包含了一个项目对象模型 (POM&#xff1a; Project Object Model)&#xff0c;一组标准集合&#xff0c;一个项目生命周期(Project Lifecycle)&#xff0c;一个依赖管理系统(Dependency Management System)&#xff0c;和…...

图解人工智能(10)人工智能的发展历程

人工智能自20世纪50年代发展至今&#xff0c;经历了若干次高潮和低谷。每到陷入困境的时候&#xff0c;总有一些科学家勇敢地打破传统思想的束缚&#xff0c;创造出新理论、新方法&#xff0c;使人工智能重现生机。例如&#xff0c;在符号主义陷入危机的时候&#xff0c;费根鲍…...

Cartographer闭环优化里的‘分支定界’:一个机器人SLAM工程师的实战笔记与避坑心得

Cartographer闭环优化中的分支定界算法&#xff1a;工程实践与性能调优指南 在SLAM&#xff08;即时定位与地图构建&#xff09;领域&#xff0c;闭环检测的准确性直接决定了系统长期运行的稳定性。作为Cartographer算法的核心组件之一&#xff0c;分支定界&#xff08;Branch …...

抖音下载器底层架构解析:策略模式与异步编排的高性能实现

抖音下载器底层架构解析&#xff1a;策略模式与异步编排的高性能实现 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...

别再乱加电阻了!手把手教你用SI9000搞定PCB阻抗匹配(附50欧姆计算实例)

高速PCB设计实战&#xff1a;用SI9000精准计算阻抗匹配的工程方法 当信号频率突破百兆赫兹时&#xff0c;PCB走线就不再是简单的电气连接——它们变成了需要精密控制的传输线。去年参与一个千兆以太网项目时&#xff0c;我曾目睹团队因阻抗失配导致信号完整性崩溃的惨痛案例&am…...

基于MCP与Apify的ESG供应链风险智能评估工具实战指南

1. 项目概述&#xff1a;一个为AI工作流赋能的ESG供应链风险智能评估工具 如果你是一名ESG分析师、供应链合规官或者投资经理&#xff0c;那么你一定对“供应商ESG尽职调查”这件事又爱又恨。爱的是&#xff0c;它确实能帮你识别潜在的环境、社会和治理风险&#xff0c;避免“…...

农业大宗商品与气候数据融合:MCP架构下的数据工程实践

1. 项目概述&#xff1a;当农业大宗商品遇上气候数据最近在做一个挺有意思的项目&#xff0c;核心是把农业大宗商品的数据和气候数据给打通了。听起来好像是个挺宏大的概念&#xff0c;对吧&#xff1f;其实说白了&#xff0c;就是想把“地里长的”和“天上变的”这两件事&…...

告别预装旧版Demo:详解mmWave SDK两种刷写模式(Demonstration vs. CCS Development)及适用场景

告别预装旧版Demo&#xff1a;详解mmWave SDK两种刷写模式&#xff08;Demonstration vs. CCS Development&#xff09;及适用场景 当你第一次拿到毫米波雷达评估模块&#xff08;EVM&#xff09;时&#xff0c;预装的Demo固件可能已经过时半年甚至更久。这时候你会面临一个关键…...

从数据模型到领域驱动设计:数据库抽象与微服务实践的演进

在软件开发的漫长历史中,如何有效地对现实世界进行建模,始终是核心挑战之一。从早期的层次数据库到当今的微服务架构,数据模型作为连接业务需求与技术实现的桥梁,经历了深刻的演变。本文基于对概念数据模型、基本数据模型和面向对象模型的系统探讨,进一步延伸到领域驱动设…...

Java十道高频面试题(一)

Java基础与集合1. HashMap的底层数据结构是什么&#xff1f;&#xff08;JDK 1.7 vs 1.8&#xff09;考察点&#xff1a;数据结构演进、哈希冲突解决、扩容死循环问题。参考答案&#xff1a;HashMap在JDK 1.7和1.8中有着本质的区别&#xff0c;主要体现在底层结构和扩容机制上&…...

如何快速破解Cursor Pro限制:一键激活AI编程助手的完整指南

如何快速破解Cursor Pro限制&#xff1a;一键激活AI编程助手的完整指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached you…...