为什么';%运算符在Python和Java中的工作方式是否相同? Python 2.7.1: Java 1.5.0:

为什么';%运算符在Python和Java中的工作方式是否相同? Python 2.7.1: Java 1.5.0:,java,python,Java,Python,哪个是正确的?为什么不同 警察说 当a或n为负数时,这个简单的定义就会崩溃,编程语言在定义这些值的方式上也会有所不同 也许这不是一个合适的SO问题,会被删除,但我很想看看答案。这只是语言选择的惯例。没有一个选择比另一个选择在数学上更正确 有关Python选择的原因的提示可以在源代码中找到: Python版本是数论中更常用的版本。Java版本实现了与C相同的行为。Python方法很方便,因为结果的符号始终与除数的符号相同。这意味着在c/c++中,x%n总是在0中给出一个值,结果是-2。所以我想这就

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

警察说

当a或n为负数时,这个简单的定义就会崩溃,编程语言在定义这些值的方式上也会有所不同


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

这只是语言选择的惯例。没有一个选择比另一个选择在数学上更正确

有关Python选择的原因的提示可以在源代码中找到:


Python版本是数论中更常用的版本。Java版本实现了与C相同的行为。Python方法很方便,因为结果的符号始终与除数的符号相同。这意味着在c/c++中,
x%n
总是在
0中给出一个值,结果是-2。所以我想这就是为什么Java走了另一条路。他们对吸引C++开发者非常感兴趣。

这是因为这两种语言是如何编程的。 Java在应用模数(%)运算符时会考虑分子的符号,Python则不会

如果用分母写“-”号,即使Java也会忽略它

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

很简单:因为Python不是Java,它们的不同之处之一就是您从维基百科文章中引用的内容


不过,说真的,这是一个相当武断的选择;一个定义在某些情况下更有用,而(?)另一个定义在其他情况下更有用。很高兴您使用的语言选择了一种,而不是使用CPU上最快的语言;)

我想这只是具体的实现。语言选择如何定义它。关于负mod的正确答案有一些争论,这可能就是为什么。你期望的答案是什么?唯一的答案可能是他们的设计不同,或者其中一个或两个都错了。我很确定C语言的原始“规范”没有说明在这种情况下发生了什么,这是一件很痛苦的事,需要见证多少努力来把一些看似琐碎的事情当作整数划分来清理高级语言的行为。C和C++是不同规格的不同语言。在C++和C89中,它是定义的实现。在C99中,它与Java中一样。这在维基百科文章OP链接中有介绍。至于动机,在java设计师吸引C++程序员的所有事情中,我高度怀疑这是在列表中。
print -34 % 4 # outputs 2
System.out.println(-34 % 4); // outputs -2