gpt4 book ai didi

java - 为什么 % 运算符在 Python 和 Java 中的工作方式不同?

转载 作者:太空狗 更新时间:2023-10-30 02:49:26 25 4
gpt4 key购买 nike

python 2.7.1:

print -34 % 4 # outputs 2

Java 1.5.0:

System.out.println(-34 % 4); // outputs -2

哪个是正确的?为什么不同?

wikipedia article on modulo

When either a or n is negative, this naive definition breaks down and programming languages differ in how these values are defined.

也许这不是一个合适的 SO 问题,会被删除,但我很想看看回复。

最佳答案

这只是语言选择的约定。没有一种选择在数学上比另一种更正确。

有关选择 Python 的原因的提示可以在源代码中找到:http://hg.python.org/cpython/file/2.7/Objects/intobject.c#l567

Python 的版本是数论中更常用的版本。 Java 版本实现了与 C 相同的行为。Python 方式很方便,因为结果的符号始终与除数的符号相同。这意味着 x % n总是在 0 <= result < n 中给出一个值当n为正时。

我推测像 C 这样的低级语言使用不同约定的原因是它“更接近金属”返回与机器语言中 n 有符号除法相同的结果(例如参见 IDIV)。如果 C 要采用数论约定,它需要编译额外的指令来将结果的符号与除数的符号进行比较,如果它们不匹配,则跳转到额外的代码以从中添加或减去除数结果(IOW,C 采用对应于最小努力的约定)。

关于java - 为什么 % 运算符在 Python 和 Java 中的工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8237469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com