Skip to content

运算符

本章介绍 Rust 中常用的算术、比较、逻辑与位运算符,以及赋值、复合赋值等写法。与类型、字面量相关的规则(如整数除法)在数据类型中说明。

算术运算符

运算符含义
+加法(对整数、浮点、char 等重载)
-减法
*乘法
/除法(整数向零截断,浮点为通常浮点除法)
%取模(余数符号与除数一致)
rust
fn main() {
    let a = 10;
    let b = 3;
    println!("a + b = {}", a + b);
    println!("a - b = {}", a - b);
    println!("a * b = {}", a * b);
    println!("a / b = {}", a / b);
    println!("a % b = {}", a % b);
}

比较运算符

结果为 bool

运算符含义
== / !=相等 / 不等
< / >小于 / 大于
<= / >=小于等于 / 大于等于
rust
fn main() {
    let a = 5;
    let b = 10;
    println!("a == b: {}", a == b);
    println!("a < b: {}", a < b);
}

逻辑运算符

操作数为 bool,结果为 bool

运算符含义
&&逻辑与(短路)
||逻辑或(短路)
!逻辑非
rust
fn main() {
    let a = true;
    let b = false;
    println!("a && b: {}", a && b);
    println!("a || b: {}", a || b);
    println!("!a: {}", !a);
}

短路含义:例如 false && expensive() 不会调用 expensive()

位运算符

对整数类型按位操作。注意 ! 在整数上表示按位取反,在 bool 上表示逻辑非,由类型决定含义:

运算符含义
&按位与
|按位或
^按位异或
!按位取反(整数)
<< / >>左移 / 右移
rust
fn main() {
    let a: u8 = 0b1010;
    let b: u8 = 0b1100;
    println!("a & b: {:b}", a & b);
    println!("a | b: {:b}", a | b);
    println!("a ^ b: {:b}", a ^ b);
}

有符号整数右移为算术右移(符号位扩展);无符号为逻辑右移。

赋值与复合赋值

  • = 赋值。
  • +=-=*=/=%= 以及 &=|=^=<<=>>=复合赋值,等价于先运算再赋给左操作数(左操作数只求值一次)。
rust
fn main() {
    let mut n = 10;
    n += 5;
    n -= 2;
    println!("{}", n);
}

其他常用运算符(速览)

下列运算符在后续章节会反复出现,此处仅列名便于查阅:

  • 引用与解引用&&mut*(与所有权相关,见所有权)。
  • 字段与索引.[]
  • 范围....=a..b 等(常用于循环与切片)。
  • 类型转换as(见数据类型)。
  • 路径与模块::

小结

  • 算术:+-*/%;整数除法截断。
  • 比较:得到 bool
  • 逻辑:&&||!(布尔);位运算另一套符号,整数上的 ! 为按位取反。
  • = 与复合赋值用于修改变量绑定的值(需 mut)。

变量与绑定规则见变量;内置类型与切片等见数据类型