You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中rem_euclid加括号为何返回不同结果?

为什么Rust中数字加括号调用rem_euclid会得到不同结果?

这完全是运算符优先级搞的鬼:在Rust里,方法调用(.)的优先级比一元负号(-)高得多,导致两种写法的运算顺序天差地别。

第一种写法:(-16_64).rem_euclid(10)

括号把-16_64变成了一个完整的负数(-1664),然后我们直接对这个负数调用rem_euclid(10)。

rem_euclid的规则是返回和除数同符号的余数,而且余数的绝对值肯定小于除数。这里除数是10(正数),所以结果一定是非负的。算一下:-1664 = (-167) * 10 + 4,余数4符合要求,所以输出4。

第二种写法:-16_64.rem_euclid(10)

因为.优先级更高,程序会先处理16_64.rem_euclid(10)——也就是先算正数1664除以10的欧几里得余数(结果是4),然后再给这个余数套上负号,最终得到-4。你给出的例子里输出是-6,大概率是数字输入时手滑了(比如实际是-16_66:1666除以10余数是6,取负后就是-6),但核心逻辑没变:先执行正数的方法调用,再取负。

说白了,加括号是让负数整体当方法调用的主体,不加括号则是先算正数的余数再取负,两者的计算逻辑完全不同,结果当然不一样。

内容的提问来源于stack exchange,提问作者mikeNatali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:25:18