Rust操作符

操作符(Operator)通常是由一个或多个特殊的符号组成(也有非特殊符号的操作符,如as),比如+ - * / % & *等等,每个操作符都代表一种动作(或操作),这种动作作用于操作数之上。简单来说,就是对操作数执行某种操作,然后返回操作后得到的结果。

比如加法操作3 + 2,这里的+是操作符,加号两边的3和2是操作数,加法符号的作用是对操作数3加上操作数2,得到计算结果5,然后返回5。

此处仅列出一部分操作符并给出它们的含义,剩下其他的操作符将在后面章节涉及到的时候再介绍。

操作符类别操作符及描述示例
一元运算符-:取负(加负号)-x
!:对整数值是位取反,对布尔值是逻辑取反!x
算术运算符+ - * / %:加、减、乘、除、取模x + y
位运算符`&^ ! << >>`:位与、位或、位异或、位取反、左移、右移
逻辑运算符`& &&
赋值操作符=x = y
复合赋值操作符`+= -= *= /= %= &== ^= <<= >>=`
等值比较运算符== !=:相等和不等x == y
大小比较运算符< <= > >=:小于、小于等于、大于、大于等于x > y

以上操作符有几点需要说明:

  • 各种运算符有优先级,可使用小括号()来强制改变多个运算符运算时的优先级,如(x + y) * z

  • ! & |操作符有两种意思,根据上下文决定:

    • 操作数是整数值时:按位取反、按位与、按位或
    • 操作数是布尔值时:逻辑取反、逻辑与、逻辑或
  • & &&都表示逻辑与,但后者会短路计算。同理| ||都表示逻辑或,但后者会短路计算

    例如,false & true在知道左边的操作数是false后,仍然会计算右边的操作数,而false && true知道左边是false后,已经能够确定整个表达式的结果是false,它会直接返回false,而不会再计算右边的操作数。

    #![allow(unused)]
    fn main() {
    // 不会panic报错退出,因为不会评估 || 运算符右边的操作数
    if true || panic!("not bang!!!") {}
    // 会panic报错退出,因为会评估 | 运算符右边的操作数
    if true | panic!("bang!!!") {}
    }