Avatar ·

Rust中是否存在取模运算(而非求余)?

大家好!我最近开始学习Rust,从Python转过来,遇到了一个意想不到的问题。在Python中,我习惯`%`运算符总是返回非负结果,即数学上的模运算。例如,Python中`(-5) % 3`得到`1`。这对于循环索引、时钟、星期几以及任何环形算术非常方便。 但在Rust中,我发现`%`运算符返回的是除法的余数(remainder),而不是模。对于负数,它的行为不同:Rust中`(-5) % 3`得到`-2`。这打破了我所有的逻辑!我正在编写一个简单的数组索引移位函数: ```rust fn shift_index(current: usize, delta: i32, len: usize) -> usize { let new_index = (current as i32 + delta) % len as i32; new_index as usize } ``` 当`delta`为负数时,代码会崩溃或给出错误结果。我知道这是不同的数学运算,但我需要的是经典的模运算(结果始终在`[0