MST

星途 面试题库

面试题:Rust 表达式中的运算符优先级问题

在Rust中,给定表达式 `2 + 3 * (4 - 1) / 2`,请详细说明其计算顺序,并解释Rust中常见运算符的优先级规则。
39.4万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 计算顺序

    • 首先计算括号内的表达式:4 - 1 = 3。此时表达式变为 2 + 3 * 3 / 2
    • 然后按照运算符优先级,先进行乘法和除法运算。乘法:3 * 3 = 9,表达式变为 2 + 9 / 2。接着除法:9 / 2 = 4(因为这里是整数除法,结果向下取整),表达式变为 2 + 4
    • 最后进行加法运算:2 + 4 = 6
  2. Rust中常见运算符的优先级规则

    • 最高优先级
      • 括号( ) 用于改变运算顺序,括号内的表达式优先计算。例如 (2 + 3) * 4 会先计算 2 + 3
      • 后缀运算符a.b(字段访问),a[idx](索引访问),a.fn()(函数调用)等。例如在 let arr = [1, 2, 3]; let num = arr[0]; 中,先进行索引访问 arr[0]
    • 次高优先级
      • 一元运算符!(逻辑非),-(负号)等。例如 let num = -5; 先对 5 取负号。
      • 乘法、除法和取模运算符*(乘法),/(除法),%(取模)。它们优先级相同,按照从左到右的顺序计算,如 10 / 2 * 3,先算 10 / 2 = 5,再算 5 * 3 = 15
    • 较低优先级
      • 加法和减法运算符+(加法),-(减法)。它们优先级相同,按照从左到右的顺序计算,如 5 - 3 + 2,先算 5 - 3 = 2,再算 2 + 2 = 4
    • 更低优先级
      • 比较运算符<(小于),>(大于),<=(小于等于),>=(大于等于),==(等于),!=(不等于)。例如 let result = 5 > 3; 先进行比较运算。
    • 最低优先级
      • 逻辑运算符&&(逻辑与),||(逻辑或)。&&|| 具有短路特性,例如 true || false && false,因为 true 已经能使 || 表达式为真,所以后面的 false && false 不会计算。

    优先级从高到低总结如下:

    1. 括号、后缀运算符
    2. 一元运算符
    3. 乘法、除法、取模运算符
    4. 加法、减法运算符
    5. 比较运算符
    6. 逻辑运算符