Python与Java中的Modulus实现之间的差异

2022-09-03 02:42:21

我注意到Python和Java中modulus运算符的不同实现。

例如,在Python中:

>>> print -300 % 800
>>> 500

而在Java中:

System.out.println(-300 % 800);
-300

这让我措手不及,因为我认为像模数这样基本的东西被普遍地以同样的方式解释。我是Python解释的粉丝(我推测它是从C中借来的),尽管我看到了Java实现背后的逻辑。

您通常更喜欢哪一个?不同的解释是否有任何具体原因?我无意发动语言战争,只是好奇。


答案 1

我更喜欢C的解释(也用于Python),其中确实是模运算符。在维基百科页面和链接中进行良好的讨论(包括一些关于为什么取红利标志会导致一个愚蠢的错误,除非一个人小心;-)。%


答案 2

现在试试这个:

>>> print 300 % -800
-500

造成这种差异的原因是,语言设计人员似乎无法决定除法后的余数是否应该具有红利除数的符号。有些语言甚至没有指定一个或另一个,所以这取决于实现者。

模操作维基百科页面上有一个语言,运算符和预期的符号列表。这是一个很好的起点,但我通常只是运行一些简单的测试,以确保我确切地知道它将如何表现,然后再用我以前没有测试过的任何语言使用它。%