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

long a = -5865797;
long b = 979667766;

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

最佳答案

假设您有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

BTW 973801969是a + b(-5865797 + 979667766)的结果。

09-30 16:59