大的负模,给出错误的结果

时间:2020-05-15 05:25:18

标签: java

我有一段修改两个长数字的代码。这些多头其中之一是负数,而另一个则不是。给定a = -5865797和b = 979667766,答案应该是973801969。但是,结果是-5865797,与变量a相同。不知道为什么会这样。

long a = -5865797;
long b = 979667766;

result = a % b;
System.out.println(result);

1 个答案:

答案 0 :(得分:0)

假设您有3,并且想要将其除以2。3除以2的整数除法是1。但是您无法进行清晰的除法,因此存在“剩余”,也称为除法的余数。模运算将您的余数返回。

如果您现在尝试将2除以3,则每部分要少于一个元素,这意味着3除以2的整数为0,余数为2。

您可以将其视为规则:每当尝试将数字“ a”除以比“ a”大的数字“ b”时,整数除法将为“ 0”,而余数将为“ a” 。这意味着,如果您对“ a”乘以“ b”进行模运算,您将始终得到“ a”,这就是您所遇到的情况。

关于不同的编程语言如何处理负操作数的信号,请检查以下页面

https://en.wikipedia.org/wiki/Modulo_operation#In_programming_languages

顺便说一句,973801969是a + b(-5865797 + 979667766)的结果。