python 2.7.1:
print -34 % 4 # outputs 2
Java 1.5.0:
System.out.println(-34 % 4); // outputs -2
哪个是正确的?为什么不同?
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/