Rust 操作符及示例

Rust 操作符

Rust 提供了一系列操作符(operators),每种操作符都有特定的功能和应用场景。

1. 算术操作符

这些操作符用于基本的数学运算:

  • + : 加法,用于两个数相加。
    • 示例 : let sum = 5 + 10;
  • - : 减法,用于两个数相减。
    • 示例 : let difference = 10 - 5;
  • * : 乘法,用于两个数相乘。
    • 示例 : let product = 4 * 3;
  • / : 除法,用于两个数相除。
    • 示例 : let quotient = 10 / 2;
  • % : 取余,用于计算两个数的余数。
    • 示例 : let remainder = 10 % 3;

2. 比较操作符

这些操作符用于比较两个值,返回一个布尔值:

  • == : 相等,用于判断两个值是否相等。
    • 示例 : let is_equal = 5 == 5;
  • != : 不相等,用于判断两个值是否不相等。
    • 示例 : let is_not_equal = 5 != 6;
  • > : 大于,用于判断左边的值是否大于右边的值。
    • 示例 : let is_greater = 10 > 5;
  • < : 小于,用于判断左边的值是否小于右边的值。
    • 示例 : let is_less = 5 < 10;
  • >= : 大于或等于,用于判断左边的值是否大于或等于右边的值。
    • 示例 : let is_greater_or_equal = 10 >= 10;
  • <= : 小于或等于,用于判断左边的值是否小于或等于右边的值。
    • 示例 : let is_less_or_equal = 5 <= 10;

3. 逻辑操作符

这些操作符用于逻辑运算,通常与布尔值结合使用:

  • && : 逻辑与,用于判断两个布尔表达式是否都为 true
    • 示例 : let and_result = true && false;
  • || : 逻辑或,用于判断两个布尔表达式是否至少一个为 true
    • 示例 : let or_result = true || false;
  • ! : 逻辑非,用于取反一个布尔表达式。
    • 示例 : let not_result = !true;

4. 赋值操作符

这些操作符用于将值赋给变量:

  • = : 赋值,将右边的值赋给左边的变量。
    • 示例 : let x = 5;
  • += : 加赋值,将右边的值加到左边的变量上。
    • 示例 : let mut x = 5; x += 10;
  • -= : 减赋值,将右边的值从左边的变量中减去。
    • 示例 : let mut x = 10; x -= 5;
  • *= : 乘赋值,将右边的值乘以左边的变量。
    • 示例 : let mut x = 2; x *= 3;
  • /= : 除赋值,将左边的变量除以右边的值。
    • 示例 : let mut x = 10; x /= 2;
  • %= : 模赋值,将左边的变量取模右边的值。
    • 示例 : let mut x = 10; x %= 3;

5. 位操作符

这些操作符用于对位进行操作,通常用于底层编程或特定算法实现:

  • & : 按位与,对两个整数的对应位都为 1 时结果为 1。
    • 示例 : let and = 5 & 3; // 结果为 1
  • | : 按位或,对两个整数的对应位有一个为 1 时结果为 1。
    • 示例 : let or = 5 | 3; // 结果为 7
  • ^ : 按位异或,对两个整数的对应位不同则结果为 1。
    • 示例 : let xor = 5 ^ 3; // 结果为 6
  • ! : 按位非,对整数的每一位取反。
    • 示例 : let not = !0b0001_0010; // 结果为 0b1110_1101
  • << : 左移,将位向左移动指定的位数(右边补零)。
    • 示例 : let left_shift = 1 << 3; // 结果为 8
  • >> : 右移,将位向右移动指定的位数(左边补符号位或补零)。
    • 示例 : let right_shift = 8 >> 3; // 结果为 1

6. 范围操作符

范围操作符用于生成数值范围:

  • .. : 半开区间,从起始值到结束值(不包括结束值)。
    • 示例 : for i in 0..5 { println!("{}", i); } // 输出 0 到 4
  • ..= : 闭区间,从起始值到结束值(包括结束值)。
    • 示例 : for i in 0..=5 { println!("{}", i); } // 输出 0 到 5
  • ..(单侧范围): 生成从起始值到某个值或从某个值到结束值的范围。
    • 示例 :
      • let r = 3..; // 从 3 到无穷大
      • let r = ..3; // 从负无穷大到 3

7. 引用与解引用操作符

这些操作符用于处理指针和引用:

  • & : 引用操作符,创建一个引用(即指向某个值的指针)。
    • 示例 : let x = 5; let y = &x;
  • * : 解引用操作符,解引用一个指针或引用,获取其指向的值。
    • 示例 : let x = 5; let y = &x; let z = *y;

8. 其他操作符

  • . : 成员访问或方法调用。
    • 示例 : let len = vec.len();
  • .. : 结构体更新语法或元组解构。
    • 示例 : let updated = Person { age: 30, ..person };
  • [] : 索引操作符,用于访问数组、切片、向量等的元素。
    • 示例 : let first = arr[0];
  • () : 调用函数或方法,或用于将表达式分组。
    • 示例 : let result = add(5, 3);
  • ? : 错误传播操作符,用于传播 ResultOption 类型的错误。
    • 示例 : let value = some_function()?;
  • :: : 访问路径操作符
    • 在模块系统中,用于访问模块中的项目(如函数、常量、类型)。
    • 用于调用结构体、枚举的关联函数或静态方法。
    • 从一个模块或包中访问另一个模块或包的项目。
    • 示例:
rust 复制代码
mod math {
    pub const PI: f64 = 3.14159;
    pub fn add(a: i32, b: i32) -> i32 {
        a + b
    }
}
fn main() {
    let pi = math::PI;
    let sum = math::add(5, 10);
    let origin = Point::origin();
    let color = Color::Red;
}
struct Point {
    x: i32,
    y: i32,
}
impl Point {
    pub fn origin() -> Self {
        Point { x: 0, y: 0 }
    }
}
enum Color {
    Red,
    Green,
    Blue,
}
  • as : 转换操作符:用于类型转换,将一个值转换为另一种类型。
    • 示例
rust 复制代码
let x = 5;
let y = x as f64; // 将 i32 转换为 f64
  • _ : 占位符:
    • 在模式匹配中表示通配符,忽略某个值;或者在类型推断中使用表示不关心的类型。
    • 示例
rust 复制代码
let tuple = (1, 2, 3);
let (_, y, _) = tuple;
let v: Vec<_> = (0..10).collect();
  • |: 模式匹配中的或操作符:
    • 在模式匹配中表示多种模式的组合,即如果任何一种模式匹配,则匹配成功。
    • 示例
rust 复制代码
let x = 1;
match x {
    1 | 2 => println!("One or two"), // 如果 x 是 1 或 2,都会匹配
    _ => println!("Other"),
}

总结

Rust 提供了丰富的操作符,以便开发者在不同的编程场景下使用。每个操作符都有其特定的功能和适用场景,理解它们的用法有助于编写更加高效和清晰的 Rust 代码。

引用
相关推荐
红尘散仙2 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记3 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
isyangli_blog3 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008113 小时前
FastAPI APIRouter
开发语言·python
Benszen3 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆3 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木3 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
喵个咪4 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
杨充4 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
噜噜噜阿鲁~4 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言