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
相关产品推荐
相关产品推荐

