擅长:python、mysql、java
<p>Python中的整数是有符号的。您声明golang版本中的所有整数都是无符号的。这就是区别。在</p>
<p>当一个无符号数从一个较小的无符号数中减去时,你会得到一个巨大的无符号数,它给出的除法余数与小的负差不同。包装时,实际上是在添加2<sup>32</sup>。2<sup>32</sup>mod65521是225,或者是<code>0xe1</code>,这就是为什么你看到{<cd2>}之间的区别。它更可能是围绕<code>b</code>计算,但如果{<cd4>}恰好在这一步非常小,<code>a</code>也可能发生。在</p>
<p>根据@samgak的评论,您还必须担心不同语言中对有符号值的%运算符的定义。因此,在执行<code>% MOD</code>操作之前,通过添加尽可能多的<code>MOD</code>使值为正。对于<code>a</code>,只需添加<code>MOD</code>。对于<code>b</code>,添加<code>(1 + n * leave / MOD) * MOD</code>。在</p>
<p>注意确保中间值不会溢出。如果<code>n*leave</code>大到足以包装所使用的整数类型,go中的代码可能会给出错误的结果。在</p>