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

Rust 入门之Rust 运算符全面解析:从基础到实战

Rust 运算符全面解析:从基础到实战

在 Rust 编程中,运算符是连接数据、实现逻辑的核心工具。它既包含 C 系语言的常见运算符,也提供了适配 Rust 安全语义的独特符号。掌握这些运算符,能让代码更简洁、执行更高效,同时加深对 Rust 核心机制的理解。

一、算术运算符:数值计算的基础

算术运算符用于执行基本的加减乘除等数值运算,需注意整数除法会直接舍弃小数部分,且 Rust 不支持 **^ 作为乘方符号。

运算符说明示例结果
+加法3 + 25
-减法8 - 26
*乘法3 * 26
/除法(整数)7 / 23
%取余7 % 21

关键补充:乘方运算

Rust 通过内置方法实现乘方,整数和浮点数需使用不同方法:

  • 整数类型:使用 .pow(exp: u32) 方法,参数为无符号 32 位整数。
  • 浮点类型:使用 .powf(exp: f64) 方法,参数支持小数。

代码示例

fn main() {// 整数乘方:2^3let int_result = 2i32.pow(3);println!("2^3 = {}", int_result); // 输出:2^3 = 8// 浮点数乘方:2^2.5let float_result = 2.0f64.powf(2.5);println!("2^2.5 = {}", float_result); // 输出:2^2.5 = 5.656854249492381
}

二、关系运算符:判断数据的大小与相等性

关系运算符用于比较两个值的关系,结果始终为布尔类型(truefalse),常用于条件判断(如 ifwhile)中。

运算符说明示例结果
==相等5 == 5true
!=不相等5 != 2true
>大于5 > 2true
<小于5 < 2false
>=大于等于5 >= 5true
<=小于等于2 <= 5true

代码示例

fn main() {let x = 5;let y = 10;println!("x == y : {}", x == y); // 输出:falseprintln!("x != y : {}", x != y); // 输出:trueprintln!("x < y  : {}", x < y);  // 输出:trueprintln!("x >= y : {}", x >= y); // 输出:false
}

三、逻辑运算符:组合布尔值的逻辑判断

逻辑运算符用于连接多个布尔值,实现复杂逻辑判断,支持“短路求值”(即提前确定结果后,不再执行后续表达式)。

运算符说明示例结果
&&逻辑与(AND)true && falsefalse
``逻辑或(OR)
!逻辑非(NOT)!truefalse

短路求值特性

  • &&:若左侧为 false,右侧表达式不再执行。
  • ||:若左侧为 true,右侧表达式不再执行。

代码示例

fn main() {let is_adult = true;let has_id = false;// 逻辑与:需同时满足才为 trueprintln!("能否入场:{}", is_adult && has_id); // 输出:false// 逻辑非:取反布尔值println!("是否未成年:{}", !is_adult); // 输出:false
}

四、位运算符:直接操作二进制位

位运算符用于对整数的二进制位进行直接操作,常用于底层开发(如硬件控制、数据压缩),操作对象必须是整数类型。

运算符说明示例(二进制)结果(二进制)
&按位与101(5) & 011(3)001(1)
``按位或`101(5)
^按位异或101(5) ^ 011(3)110(6)
!按位取反!101(5)...11111010
<<左移101(5) << 11010(10)
>>右移101(5) >> 110(2)

代码示例

fn main() {let x: u8 = 0b1010; // 二进制 1010,对应十进制 10let y: u8 = 0b1100; // 二进制 1100,对应十进制 12println!("x & y = {:b}", x & y); // 输出:1000println!("x << 1 = {:b}", x << 1); // 输出:10100(左移 1 位,相当于乘 2)println!("!x = {:b}", !x); // 输出:11110101(u8 类型,8 位补码)
}

五、赋值与复合赋值运算符:简化变量更新

赋值运算符用于给变量赋值,复合赋值运算符则将“运算+赋值”合并,简化代码书写,且仅能用于可变变量(mut 修饰)。

基础运算符复合运算符说明示例等价写法
=-直接赋值x = 3-
++=加后赋值x += 2x = x + 2
--=减后赋值x -= 2x = x - 2
**=乘后赋值x *= 2x = x * 2
//=除后赋值x /= 2x = x / 2
&&=按位与后赋值x &= 2x = x & 2
<<<<=左移后赋值x <<= 1x = x << 1

代码示例

fn main() {let mut n = 5; // 必须用 mut 修饰,才能修改值n += 3; // 等价于 n = n + 3,结果为 8println!("n += 3 -> {}", n);n >>= 1; // 等价于 n = n >> 1,结果为 4println!("n >>= 1 -> {}", n);
}

六、其他常用运算符:适配 Rust 独特语义

除上述基础运算符外,Rust 还提供了多个适配其语言特性的运算符,覆盖范围生成、类型转换、错误处理等场景。

运算符说明示例作用
..左闭右开范围0..5生成 0、1、2、3、4(不含 5)
..=全闭范围0..=5生成 0、1、2、3、4、5(含 5)
as显式类型转换5 as f32将整数 5 转换为浮点数 5.0
?错误传播read_file()?若 Result 为 Err,直接返回错误
*解引用*ptr获取指针/引用指向的值
&取引用&x创建变量 x 的不可变引用
ref绑定为引用let ref y = x等价于 let y = &x

代码示例

fn main() {// 1. 范围运算符:用于循环println!("左闭右开范围(1..4):");for i in 1..4 {print!("{} ", i); // 输出:1 2 3}println!("\n全闭范围(1..=3):");for i in 1..=3 {print!("{} ", i); // 输出:1 2 3}// 2. 类型转换与引用let a = 10i32;let b = a as f64; // 转换为浮点数let c = &a; // 取 a 的引用println!("\na = {}, b = {}, *c = {}", a, b, *c); // 输出:a = 10, b = 10.0, *c = 10
}

要不要我帮你整理一份 Rust 运算符速查表?包含所有运算符的分类、用法和示例,方便你日常开发时快速查阅。

http://www.dtcms.com/a/548983.html

相关文章:

  • Rust:借用 切片
  • 【Blender工具】
  • Spring Al学习6:嵌入模型 API
  • 坪山区住房和建设局网站wordpress能放视频
  • 网站承建商有哪些注册了一个域名怎么做网站
  • 我公司是帮企业做网站的_现在要帮客户们的网站备案微信公众营销平台开发
  • MPC模型预测控制:原理、设计与MATLAB实现
  • JavaEE初阶,网络编程篇
  • 基于中值滤波和高斯平滑的三维点云数据滤波matlab仿真
  • Java设计模式应用--装饰器模式
  • 【MATLAB例程】基于梯度检测自适应的互补滤波 vs 标准互补滤波,附MATLAB代码下载链接,可直接运行,方便学习和修改成自己想要的程序
  • 在检验铸铁平台精度使用三研法检验有哪些好处
  • 用Blender制作室内效果图宜居之地
  • blender4.5 使用外部IDE(pycharm)编辑脚本(bpy)实践指南
  • 计算机的一点基础知识
  • 广州网站建设 乐云seo国外优秀论文网站
  • CSS 图像拼合技术
  • 【C++】模板进阶 | 继承
  • 排名优化网站建设长沙网站建设优化
  • 厦门网站优化服务pyhton做网站
  • 论文阅读笔记——数据增强
  • 如何裁剪YOLOv8m的大目标检测头并验证其结构
  • 扩展阅读:目标检测(Object Detection)标注
  • MR30分布式IO:破局锂电池制造产线,引领高效生产新变革
  • AI赋能科研创新:ChatGPT-4o与DeepSeek-R1在学术研究中的深度应用指南
  • 《数据库系统》SQL语言之分组查询与分组过滤(理论理解分析+实例练习)
  • 家乡介绍网页设计海口seo网络推广
  • 【ROS2】动作服务器:rclcpp_action::Client 详解
  • 红松APP首秀北京老博会,“有温度的科技”赋能退休兴趣生活
  • 【ZEGO即构开发者日报】Soul AI Lab开源播客语音合成模型;腾讯混元推出国内首个交互式AI播客;ChatGPT Go向用户免费开放一年......