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

【ChatGPT辅助学Rust | 基础系列 | 基础语法】变量,数据类型,运算符,控制流

在这里插入图片描述


文章目录

  • 简介:
  • 一,变量
    • 1,变量的定义
    • 2,变量的可变性
    • 3,变量的隐藏
  • 二、数据类型
    • 1,标量类型
    • 2,复合类型
  • 三,运算符
    • 1,算术运算符
    • 2,比较运算符
    • 3,逻辑运算符
    • 4,位运算符
    • 5,赋值运算符
  • 四、控制流
    • 1,条件语句
    • 2,循环语句
  • 总结


简介:

本章节将详细介绍Rust的基础语法,包括变量,数据类型,运算符,以及控制流。每个部分都将提供详细的解释和代码示例,以便于理解和学习。


一,变量

在编程语言中,变量是一种基本的概念,它们是用来存储数据的。在Rust中,变量的特性和其他语言有所不同。

1,变量的定义

在Rust中,变量的定义使用let关键字。定义变量的基本格式是let 变量名 = 变量值;。例如,定义一个整数变量x,并赋值为5,可以写成let x = 5;

let x = 5;

在这个例子中,x就是变量名,5就是变量值。注意,Rust是一种静态类型语言,这意味着在编译时就必须知道所有变量的类型。但是,Rust有一个强大的类型推断系统,它可以根据变量的值推断出变量的类型。在这个例子中,编译器会自动推断出x的类型是i32

2,变量的可变性

在Rust中,变量默认是不可变的。这是一种保障数据安全的方式。如果试图改变一个不可变变量的值,编译器会报错。

let x = 5;
x = 6; // 编译错误:不能赋值给不可变变量

如果需要改变变量的值,需要在定义变量时使用mut关键字,表示这个变量是可变的。

let mut x = 5;
x = 6; // 这是合法的

在这个例子中,x是一个可变变量,可以改变它的值。

3,变量的隐藏

在Rust中,可以定义一个新的变量来隐藏旧的变量。这被称为变量的隐藏。

let x = 5;
let x = x + 1; // 隐藏旧的x,定义一个新的x

在这个例子中,第二个let语句定义了一个新的变量x,并隐藏了旧的变量x。新的变量x的值是旧的变量x的值加1。


二、数据类型

Rust是一种静态类型语言,这意味着在编译时就必须知道所有变量的类型。Rust的数据类型主要分为两大类:标量(Scalar)和复合(Compound)。

1,标量类型

标量类型代表一个单一的值,Rust有四种基本的标量类型:整型,浮点型,布尔型,和字符型。

  1. 整型
    整型是一种数字类型,可以是有符号的(i8, i16, i32, i64, i128 和 isize)或无符号的(u8, u16, u32, u64, u128 和 usize)。每一个变量后面的数字代表该变量占用的位数。例如,i32类型的整数占用32位,i64占用64位。isize和usize类型依赖运行程序的计算机架构:64位架构上它们是64位的, 32位架构上它们是32位的。
let x: i32 = 5; // 有符号整型
let y: u32 = 5; // 无符号整型
  1. 浮点型
    Rust的浮点数类型是f32 和 f64,分别占32位和64位。默认类型是f64,因为在现代CPU中,它几乎与f32一样快,但精度更高。
let x = 2.0; // f64
let y: f32 = 3.0; // f32
  1. 布尔型
    布尔类型有两个可能的值:true 和 false。Rust中布尔类型的大小为一位。
let t = true;
let f: bool = false; // 显式指定类型
  1. 字符型
    Rust的char类型代表了一个Unicode标量值,这意味着它可以比ASCII表表示更多的内容。char类型的大小为四个字节,并且用单引号指定。
let c = 'z';
let z = 'ℤ';
let heart_eyed_cat = '😻';

2,复合类型

复合类型可以将多个值组合成一个类型。Rust有两个原生的复合类型:元组(tuple)和数组(array)。

  1. 元组类型
    元组是一个将多个其他类型的值组合进一个复合类型的主要方式。元组长度固定:一旦声明,其长度不能增大或缩小。
let tup: (i32, f64, u8) = (500, 6.4, 1);
  1. 数组类型
    对于每个元素类型相同的情况,Rust提供了数组类型。与元组不同,数组的长度在编译时就必须是固定的,不能动态改变。
let a = [1, 2, 3, 4, 5];
let months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

三,运算符

Rust语言提供了一系列的运算符,包括算术运算符,比较运算符,逻辑运算符,位运算符,赋值运算符等。这些运算符在编程中起着至关重要的作用,用于执行各种计算和逻辑操作。下面将对这些运算符进行详细的介绍,并提供相应的代码示例。

1,算术运算符

Rust支持基本的算术运算符,包括加法(+), 减法(-), 乘法(*), 除法(/), 取余(%):

let a = 10;
let b = 3;let sum = a + b; // 加法
println!("Sum: {}", sum); // 输出:13let difference = a - b; // 减法
println!("Difference: {}", difference); // 输出:7let product = a * b; // 乘法
println!("Product: {}", product); // 输出:30let quotient = a / b; // 除法
println!("Quotient: {}", quotient); // 输出:3let remainder = a % b; // 取余
println!("Remainder: {}", remainder); // 输出:1

2,比较运算符

比较运算符用于比较两个值,包括等于(==), 不等于(!=), 大于(>), 小于(<), 大于等于(>=), 小于等于(<=):

let a = 10;
let b = 20;println!("a == b: {}", a == b); // 输出:false
println!("a != b: {}", a != b); // 输出:true
println!("a > b: {}", a > b); // 输出:false
println!("a < b: {}", a < b); // 输出:true
println!("a >= b: {}", a >= b); // 输出:false
println!("a <= b: {}", a <= b); // 输出:true

3,逻辑运算符

逻辑运算符用于组合多个条件,包括逻辑与(&&), 逻辑或(||), 逻辑非(!):

let a = true;
let b = false;println!("a && b: {}", a && b); // 输出:false
println!("a || b: {}", a || b); // 输出:true
println!("!a: {}", !a); // 输出:false

4,位运算符

位运算符用于操作整数的二进制位,包括位与(&), 位或(|), 位异或(^), 左移(<<), 右移(>>):

let a = 0b_0011_1100; // 60
let b = 0b_0000_1101; // 13println!("a & b: {}", a & b); // 输出:12
println!("a | b: {}", a | b); // 输出:61
println!("a ^ b: {}", a ^ b); // 输出:49
println!("a << 2: {}", a << 2); // 输出:240
println!("a >> 2: {}", a >> 2); // 输出:15

5,赋值运算符

赋值运算符用于给变量赋值,包括等号(=), 加等(+=), 减等(-=), 乘等(*=), 除等(/=), 取余等(%=), 位与等(&=), 位或等(|=), 位异或等(^=), 左移等(<<=), 右移等(>>=):

let mut a = 10;a += 5; // a = a + 5
println!("a: {}", a); // 输出:15a -= 2; // a = a - 2
println!("a: {}", a); // 输出:13a *= 3; // a = a * 3
println!("a: {}", a); // 输出:39a /= 3; // a = a / 3
println!("a: {}", a); // 输出:13a %= 5; // a = a % 5
println!("a: {}", a); // 输出:3a &= 2; // a = a & 2
println!("a: {}", a); // 输出:2a |= 1; // a = a | 1
println!("a: {}", a); // 输出:3a ^= 1; // a = a ^ 1
println!("a: {}", a); // 输出:2a <<= 2; // a = a << 2
println!("a: {}", a); // 输出:8a >>= 1; // a = a >> 1
println!("a: {}", a); // 输出:4

四、控制流

控制流是编程中的基本概念,它决定了代码的执行顺序。在Rust中,控制流主要包括条件语句和循环语句。

1,条件语句

条件语句是根据特定条件来决定执行哪段代码。在Rust中,主要使用ifelse关键字来创建条件语句。

  1. if语句
    if语句用于测试某个条件是否满足,如果满足,则执行相应的代码块。以下是一个简单的例子:
let number = 7;if number < 5 {println!("condition was true");
} else {println!("condition was false");
}

在这个例子中,number < 5是一个条件表达式,它的结果是一个布尔值。如果这个值为true,则执行if后面的代码块,否则执行else后面的代码块。

  1. else if语句
    else if语句用于测试多个条件。如果if语句的条件不满足,那么就会测试else if语句的条件,如果else if语句的条件满足,就执行相应的代码块,否则继续测试下一个else if语句的条件,如果所有的else if语句的条件都不满足,就执行else后面的代码块。
let number = 6;if number % 4 == 0 {println!("number is divisible by 4");
} else if number % 3 == 0 {println!("number is divisible by 3");
} else if number % 2 == 0 {println!("number is divisible by 2");
} else {println!("number is not divisible by 4, 3, or 2");
}

2,循环语句

循环语句用于重复执行某段代码,直到满足特定的条件。在Rust中,主要使用loopwhilefor关键字来创建循环语句。

  1. loop语句
    loop语句用于创建无限循环,也就是说,它会一直重复执行相应的代码块,直到显式地使用break关键字来退出循环。
let mut counter = 0;loop {counter += 1;if counter == 10 {break;}
}

在这个例子中,loop语句会一直重复执行,直到counter的值等于10,然后使用break关键字退出循环。

  1. while语句
    while语句用于创建条件循环,也就是说,它会一直重复执行相应的代码块,直到条件表达式的结果为false
let mut number = 3;while number != 0 {println!("{}!", number);number -= 1;
}println!("LIFTOFF!!!");

在这个例子中,while语句会一直重复执行,直到number的值等于0,然后退出循环。

  1. for语句
    for语句用于遍历一个集合的所有元素。在Rust中,可以使用for语句和in关键字来遍历一个范围,一个迭代器,或者一个数组。
let a = [10, 20, 30, 40, 50];for element in a.iter() {println!("the value is: {}", element);
}

在这个例子中,for语句遍历数组a的所有元素,并打印每个元素的值。


总结

本章节详细介绍了Rust的基础语法,包括变量,数据类型,运算符,以及控制流。理解这些基础知识是学习Rust的重要步骤,希望这些内容能帮助理解和掌握Rust的基础语法。

相关文章:

【ChatGPT辅助学Rust | 基础系列 | 基础语法】变量,数据类型,运算符,控制流

文章目录 简介&#xff1a;一&#xff0c;变量1&#xff0c;变量的定义2&#xff0c;变量的可变性3&#xff0c;变量的隐藏 二、数据类型1&#xff0c;标量类型2&#xff0c;复合类型 三&#xff0c;运算符1&#xff0c;算术运算符2&#xff0c;比较运算符3&#xff0c;逻辑运算…...

使用云服务器和Frp(快速反向代理)框架快速部署实现内网穿透

目录 一. 背景1.1 内网穿透1.2 Frp介绍1.3 Frp配置流程 二. 云服务器配置2.1 配置安全组2.2 编写frps.ini 三. 内网主机配置3.1 编辑frpc.ini文件3.2 启动服务并配置开机自启动 四. 参考文献 一. 背景 现在有一台ubuntu云服务器&#xff0c;我想通过内网穿透将一台内网的主机当…...

Mac 上使用 Tesseract OCR 识别图片文本

Tesseract OCR 引擎&#xff1a;Tesseract是一个开源的OCR引擎&#xff0c;你需要先安装它。可以从Tesseract官方网站&#xff08;https://github.com/tesseract-ocr/tesseract&#xff09;下载适用于你的操作系统的安装程序或源代码&#xff0c;并按照官方文档进行安装。 Tes…...

《MapboxGL 基础知识点》- 放大/缩小/定位/级别

中心点 getCenter&#xff1a;获取中心点 const {lng, lat} map.getCenter(); setCenter&#xff1a;设置中心点 // lng, lat map.setCenter([134, 28]); 缩放级别 getZoom&#xff1a;获取当前缩放级别 map.getZoom(); setZoom&#xff1a;设置缩放级别 map.setZoom(5…...

VScode的简单使用

一、VScode的安装 Visual Studio Code简称VS Code&#xff0c;是一款跨平台的、免费且开源的现代轻量级代码编辑器&#xff0c;支持几乎主流开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段提示、代码对比等特性&#xff0c;也拥有对git的开箱…...

# Unity 如何获取Texture 的内存大小

Unity 如何获取Texture 的内存大小 在Unity中&#xff0c;要获取Texture的内存文件大小&#xff0c;可以使用UnityEditor.TextureUtil类中的一些函数。这些函数提供了获取存储内存大小和运行时内存大小的方法。由于UnityEditor.TextureUtil是一个内部类&#xff0c;我们需要使…...

dolphinscheduler switch+传参无坑版

dolphinscheduler 的前后传参有较多的坑&#xff0c;即便是3.0.5版本仍然有一些bug 下面是目前能无坑在3.0.5版本上使用的操作 前置任务 在界面上设置变量和参数名称 跟官方网站不一样&#xff0c;注意最后一行一定使用echo ${setValue(key$query)}的方式&#xff0c;注意引…...

VINS-fusion安装

VINS-fusion中用的opencv3&#xff0c;如果安装的opencv4要做一系列替换 VINS-Mono在opencv4环境下的安装问题和解决方法 https://zhuanlan.zhihu.com/p/548140724 Vins-Fusion安装记录 https://zhuanlan.zhihu.com/p/432167383 CV_FONT_HERSHEY_SIMPLEX -> cv::FONT_HER…...

智慧消防:如何基于视频与智能分析技术搭建可视化风险预警平台?

一、背景分析 消防安全是一个重要的话题&#xff0c;涉及到每个人的生活和安全。每年都会发生大量的火灾&#xff0c;给人们带来极大的危害&#xff0c;摧毁了大量的财产&#xff0c;甚至造成了可怕的人员伤亡。而消防安全监督管理部门人员有限&#xff0c;消防安全监管缺乏有…...

selenium定位元素的方法

Selenium可以驱动浏览器完成各种操作&#xff0c;比如模拟点击等。要想操作一个元素&#xff0c;首先应该识别这个元素。人有各种的特征&#xff08;属性&#xff09;&#xff0c;我们可以通过其特征找到人&#xff0c;如通过身份证号、姓名、家庭住址。同理&#xff0c;一个元…...

RISC-V特权级别

特权级别 RISC-V共有6个特权级别&#xff1a; 机器模式&#xff08;M模式&#xff09; M模式全称为Machine mode&#xff08;机器模式&#xff09;运行在这个模式下的程序为最高权限&#xff0c;它属于RISC-V里的最高权限模式&#xff0c;它具有访问所有资源的权限&#xff…...

RISC-V 指令集介绍

1. 背景介绍 指令集从本质上可以分为复杂指令集&#xff08;Complex Instruction Set Computer&#xff0c;CISC&#xff09;和精简指令集&#xff08;Reduced Instruction Set Computer&#xff0c;RISC&#xff09;两种。复杂指令集的特点是能够在一条指令内完成很多事情。 指…...

操作系统5

设备管理 I/O设备 什么是&#xff1f;--- 将数据Input/Output&#xff08;输入/输出&#xff09;计算机的外部设备。 分类&#xff1a; 按使用特性&#xff1a;人机交互类外设、存储设备、网络通信设备&#xff1b; 按传输速度&#xff1a;低速、中速、高速设备&#xff1…...

K8S系列文章之 Docker常用命令

一、镜像基础命令&#xff1a; $ docker info # 查看docker信息 $ docker system df # 查看镜像/容器/数据卷所占的空间。 $ ip addr #查看容器内部网络地址。 $ docker images # 查看镜像 $ docker search 镜像名称 # 搜索镜像 --limit :只列出N个镜像&#xff0c;默认为25个…...

谷歌: 安卓补丁漏洞让 N-days 与 0-days 同样危险

近日&#xff0c;谷歌发布了年度零日漏洞报告&#xff0c;展示了 2022 年的野外漏洞统计数据&#xff0c;并强调了 Android 平台中长期存在的问题&#xff0c;该问题在很长一段时间内提高了已披露漏洞的价值和使用。 更具体地说&#xff0c;谷歌的报告强调了安卓系统中的 &quo…...

linux 学成之路(基础篇)(二十三)MySQL服务(下)

目录 一、用户权限管理概述 二、用户权限类型 三、用户赋予权限 四、删除权限 五、删除用户 一、用户权限管理概述 数据库用户权限管理是数据库系统中非常重要的一个方面&#xff0c;它用于控制不同用户访问和操作数据库的权限范围。数据库用户权限管理可以保护敏感数据和…...

MySQL初探

Background 通过阅读小林coding&#xff0c;大致了解了mysql数据库的种种特点&#xff0c;与之前学的数据库实现大体思路相同&#xff0c;感觉学习不能停留在理论层面&#xff0c;要调研生产级别的中间件实现。 一条代码运行在mysql上的流程 1. 连接的过程需要先经过 TCP 三次…...

blender 用蒙版添加材质

一、添加材质常规方法 选择物体新建材质&#xff0c;shift a 新建图像纹理&#xff0c;此时会发现添加上的纹理会有接缝&#xff0c;shift a 新建映射 纹理坐标&#xff0c;纹理坐标选择生成&#xff0c;此时&#xff0c;之前的接缝便会消失&#xff1b; 如何快捷添加纹理坐…...

前端面试的性能优化部分(2)每篇10题

1. 常见的图片格式及使用场景 常见的图片格式有 JPEG、PNG、GIF、WebP 和 SVG&#xff0c;它们各有适用的使用场景&#xff1a; JPEG (Joint Photographic Experts Group)&#xff1a; 使用场景&#xff1a;适用于照片和真实场景的图片&#xff0c;特别是色彩丰富和渐变丰富的…...

Spring——Spring是什么?IoC容器是什么?

文章目录 前言一、Spring是什么1.IoC 容器 —— 容器2.IoC 容器 —— IoC传统程序开发控制反转式程序开发 3.Spring IoC 二、DI是什么总结 前言 本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话&#xff0c;互关一下…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...