我有一段代码可以对两个长数字进行取模。其中一个多头是负数,另一个则不是。给定 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” 。这意味着如果你用“b”对“a”取模,你总是会得到“a”,这就是你的情况发生的情况。
关于不同的编程语言如何处理负操作数的信号,请查看下面的页面
https://en.wikipedia.org/wiki/Modulo_operation#In_programming_languages
顺便说一句,973801969 是 a + b (-5865797 + 979667766) 的结果。
关于java - 大的负模给出错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61812309/