Java 不同语言中模算子的差异

Java 不同语言中模算子的差异,java,python,c++,c,modulo,Java,Python,C++,C,Modulo,根据编程语言的不同,模运算符的答案似乎有所不同。例如,c++、c和Java对于类似-5%2的表达式都返回-1,而python3.x对于相同的计算输出1。为什么会这样 编辑:错误地写了-10%2而不是-5%2。mod的行为因您使用的语言以及您在该语言中使用的mod的哪个实现而不同 以下行为列表: 在您的例子中,python中%的结果采用除数的符号 >>> 11%-2 -1 >>> -11%2 1 但是math.fmod正好相反 >>> imp

根据编程语言的不同,模运算符的答案似乎有所不同。例如,
c++
c
Java
对于类似
-5%2
的表达式都返回-1,而
python3.x
对于相同的计算输出1。为什么会这样


编辑:错误地写了-10%2而不是-5%2。

mod的行为因您使用的语言以及您在该语言中使用的mod的哪个实现而不同

以下行为列表:

在您的例子中,python中
%
的结果采用除数的符号

>>> 11%-2
-1
>>> -11%2
1
但是
math.fmod
正好相反

>>> import math
>>> math.fmod(11,-2)
1.0
>>> math.fmod(-11,2)
-1.0

Java正好相反
%
使用被除数,fmod使用除数。

在这个问题中,c和c++9使用printf(“%d”),Java使用sout(),python使用print()呃,在所有语言中都应该是0把问题放在一边:在Python中,结果的签名取决于第二个操作数的签名。Java中没有模运算符。它是一个余数运算符。仅此一点就足以回答您的问题。“为什么会这样?”因为Python的设计者决定不遵循C语言的先例,而Java的设计者决定遵循先例(实际上是在Java的许多特性上)。
>>> 11%-2
-1
>>> -11%2
1