java中负数的Mod运算符不起作用?

java中负数的Mod运算符不起作用?,java,modulo,Java,Modulo,在Java中我尝试过 -1 % 20 希望它返回-1。。。但实际值为19。 有人能帮我吗?-1不能被20整除,因此结果是-1,正如预期的那样模运算在语义上与整数除法紧密相连,因为以下等式应始终保持不变: x = a * (x / a) + (x % a) 由于Java中-1/20是0,这意味着-1%20应该是-1,方程才能成立。如果您谈论的是自然数内的剩余类,您可以将-1解释为19,但resudie类在数学上不受模运算符的约束。如果您想要一个正结果,您可以包装mod 公共静态int-Po

在Java中我尝试过

-1 % 20  
希望它返回-1。。。但实际值为19。

有人能帮我吗?

-1
不能被
20
整除,因此结果是
-1
,正如预期的那样

模运算在语义上与整数除法紧密相连,因为以下等式应始终保持不变:

x = a * (x / a) + (x % a)

由于Java中
-1/20
0
,这意味着
-1%20
应该是
-1
,方程才能成立。如果您谈论的是自然数内的剩余类,您可以将
-1
解释为
19
,但resudie类在数学上不受模运算符的约束。

如果您想要一个正结果,您可以包装mod

公共静态int-PositiveMod(int-value,int-mod)
{
返回((值%mod+mod)%mod);
}
int结果=正EMOD(-1,20)//返回19

不,事实并非如此。它是-1:
intx=-1;int y=x%20;系统输出打印项次(y)打印-1。请显示一个简短但完整的程序来演示问题…而不是显示您已尝试-1+20=19下次将处理相同的问题@JonskeetGoogleCalculator在我计算时给出-19。最好问谷歌……不要问StackOverflow@LokeshSingal无论您应用整数除法的哪个定义(实际上有2个),
-19
绝对是错误的。也许你的意思是
19
?@Lokeshingal在数学中,Mod N中的值按惯例减少为[0,N),包括负值。在汇编代码中,因此在大多数编程语言中,模只是除法的余数。这意味着
%
可以返回负值。从技术上讲,…-21,-1,19,39…Mod 20都是相同的,但在编程时不同。