🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

🦀 Rust 运算符详解

📊 运算符概览

🔢 算术运算符

⚖️ 比较运算符

🧠 逻辑运算符

🔌 位运算符

📋 赋值运算符

🧭 范围运算符

🔀 其他常用运算符

🧩 运算符优先级

💡 运算符重载

⚠️ 注意事项


img


Rust 提供了丰富且类型安全的运算符来帮助你完成各种操作。我会通过分类介绍、示例代码和关键注意事项来带你了解 Rust 中的运算符。

🦀 Rust 运算符详解

📊 运算符概览

Rust 中的运算符按功能主要分为以下几类:

类别 代表符号 简单示例
​算术运算符​ +, -, *, /, % a + b
​比较运算符​ ==, !=, <, >, <=, >= a == b
​逻辑运算符​ &&, `
​位运算符​ &, ` , ^, !, <<, >>`
​赋值运算符​ =, +=, -=, *=, /=, %= a += b
​范围运算符​ .., ..= 1..5
​其他运算符​ as, ?, ., ::, &, * x as i32

🔢 算术运算符

算术运算符用于基本的数学计算。

运算符 描述 示例
+ 加法 let sum = 5 + 10; // 15
- 减法 let difference = 95 - 5; // 90
* 乘法 let product = 4 * 30; // 120
/ 除法 let quotient = 56 / 32; // 1
% 取模(求余数) let remainder = 10 % 3; // 1

​注意​​:

  • ​整数除法​​:会向零截断(舍弃小数部分)。例如 5 / 2 结果是 2-5 / 3 结果是 -1
  • ​浮点数除法​​:保留小数部分。例如 5.0 / 2.0 结果是 2.5
  • ​除以零​​:整数除法中,如果除数为 0,​​程序会在运行时 panic​​(崩溃)。

⚖️ 比较运算符

比较运算符用于比较两个值,并返回一个 bool 类型(truefalse)。

运算符 描述 示例
== 等于 5 == 5 // true
!= 不等于 5 != 6 // true
< 小于 10 > 5 // true
> 大于 5 < 10 // true
<= 小于等于 5 <= 10 // true
>= 大于等于 10 >= 10 // true

​注意​​:比较的双方类型必须一致。


🧠 逻辑运算符

逻辑运算符用于布尔值(truefalse)之间的逻辑操作。

运算符 描述 示例
&& 逻辑与 (AND) true && false // false
` `
! 逻辑非 (NOT) !true // false

​短路求值 (Short-Circuiting)​​:&&|| 运算符具有短路行为。

  • a && b 中,如果 afalse,则不会计算 b
  • a || b 中,如果 atrue,则不会计算 b

🔌 位运算符

位运算符用于对整数类型的二进制位进行操作。

运算符 描述 示例(假设 a=2, b=3)
& 按位与 a & b // 2 (0b10 & 0b11 = 0b10)
` ` 按位或
^ 按位异或 a ^ b // 1 (0b10 ^ 0b11 = 0b01)
! 按位取反 !b // -4 (按位取反,结果取决于位数)
<< 左移 a << 1 // 4 (0b10 << 1 = 0b100)
>> 右移 b >> 1 // 1 (0b11 >> 1 = 0b01)

​注意​​:

  • ​右移​​:
    • ​无符号整数​​:右移时左侧补 0(逻辑右移)。
    • ​有符号整数​​:右移时左侧补符号位(算术右移)。

📋 赋值运算符

赋值运算符用于给变量赋值。

运算符 描述 示例
= 简单赋值 let x = 5;
+= 加后赋值 x += 1; // 等价于 x = x + 1;
-= 减后赋值 x -= 1; // 等价于 x = x - 1;
*= 乘后赋值 x *= 2; // 等价于 x = x * 2;
/= 除后赋值 x /= 2; // 等价于 x = x / 2;
%= 取模后赋值 x %= 2; // 等价于 x = x % 2;

​注意​​:

  • Rust ​​不支持​++-- 运算符。需使用 x += 1x -= 1
  • 复合赋值表达式的值始终是 ()(单元类型),而不是存储的值。

🧭 范围运算符

范围运算符用于生成一个范围的数值,常用于循环和模式匹配。

运算符 描述 示例
.. 左闭右开区间 1..5 // 1, 2, 3, 4
..= 闭区间 1..=5 // 1, 2, 3, 4, 5

🔀 其他常用运算符

运算符 描述 示例
as 显式类型转换 let x: i32 = 10; let y: u8 = x as u8;
? 错误传播 let value = some_function()?;
. 成员访问 vec.len()
:: 路径分隔 std::fs::read_to_string
&, * 引用和解引用 let x = 5; let y = &x; let z = *y;
[] 索引 let first = arr[0];

🧩 运算符优先级

运算符的优先级决定了表达式中操作的执行顺序。以下是一些常见的优先级规则(从高到低):

  1. 括号 ()
  2. 单目运算符(如 -, !, *, &
  3. as 类型转换
  4. 乘、除、取余 *, /, %
  5. 加、减 +, -
  6. 位移 <<, >>
  7. 位与 &
  8. 位异或 ^
  9. 位或 |
  10. 比较运算符(如 ==, !=, <, >, <=, >=
  11. 逻辑与 &&
  12. 逻辑或 ||
  13. 范围 .., ..=
  14. 赋值运算符 =, +=

​最佳实践​​:为了代码清晰且避免错误,​​强烈推荐使用括号 ()​ 来明确指定运算顺序,而不是依赖记忆优先级。


💡 运算符重载

Rust 允许通过实现 std::ops 模块中相应的 trait 来为自定义类型重载大部分运算符。例如,实现 std::ops::Add trait 可以重载 + 运算符:

use std::ops::Add;

#[derive(Debug)]
struct Point {
    x: i32,
    y: i32,
}

// 为 Point 类型重载 `+` 运算符
impl Add for Point {
    type Output = Self; // 输出类型是 Point 自身

    fn add(self, other: Self) -> Self::Output {
        Point {
            x: self.x + other.x,
            y: self.y + other.y,
        }
    }
}

fn main() {
    let p1 = Point { x: 1, y: 2 };
    let p2 = Point { x: 3, y: 4 };
    let p3 = p1 + p2; // 使用重载的 +
    println!("{:?}", p3); // 输出: Point { x: 4, y: 6 }
}

类似地,你可以为你的自定义类型重载其他运算符,如 -Sub)、*Mul)、/Div)、%Rem)等。


⚠️ 注意事项

  1. ​整数溢出​​:
    • 在 ​​调试 (debug)​​ 模式下,Rust 会检查整数溢出,发生溢出时会导致 ​​panic​​。
    • 在 ​​发布 (release)​​ 模式下,Rust ​​不​​检查整数溢出,而是执行二进制补码环绕(例如,u8::MAX + 1 会得到 0)。
  2. ​浮点数比较​​:由于浮点数的精度问题,直接使用 ==!= 比较浮点数可能会因精度误差导致意外结果。通常建议判断两个浮点数的差值是否小于一个极小值(例如 f64::EPSILON),或者使用特定的数学库。
  3. ​类型一致性​​:Rust 是强类型语言,运算符两边的操作数类型通常必须相同,否则需要显式使用 as 进行类型转换。

希望这份教程能帮助你全面理解 Rust 中的运算符!实践是掌握的关键,多写代码来熟悉它们吧。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

一座年轻的奋斗人之城,一个温馨的开发者之家。在这里,代码改变人生,开发创造未来!

更多推荐