我从上一个问题中学到了很多东西,希望我再也不会犯同样的错误。)
这源于之前的问题。以下是我认识的内容:
对于java中的int(我假设所有语言,但我在JAVA专门询问):
1/3 = 0
1%3 = 1
当i%j = i
以及前一张海报解释这是如何工作的时候,我很难过i < j
,并且还说“首先,在Java中,%是余数(非模数)运算符,略有不同的语义......“
他们的解释非常适合我需要的东西。然而,我对他们的引语感到困惑,因为我总是在数学模块化= =余数除法中被教导。
如何在JAVA中执行模块划分,并且在尝试将%用作模数运算符时是否存在缺陷?
答案 0 :(得分:0)
您可能会对&#34;模运算符&#34;感到困惑。在算术中,它与Java和类似语言中的%
运算符相同,我不认为有&#34;模块化部门&#34;。 java中的%
运算符将始终从两个数字之间的重复除法返回整数余数。就像在算术(i % j) = i
中i < j
和i >= 0
一样。操作的结果小于j
。
答案 1 :(得分:0)
mathematicaly,modulo是与余数的划分。
7 mod 4 = 1 R3
请参阅:
n = a * m + r
Java中的模运算符(与大多数其他语言一样)只给出了余数部分而不是我不知道,如果它与负数一致正确。
详细说来,数学上模数总是正面的。这是java中模数运算符的区别。
a mod n = b, if there is a number k existing with a = b + kn
and 0 <= b < n
这意味着,如果你采取-14 mod 4:
-14 = b + k * 4 //lets take -3 for k
-14 = b + -3 * 4
-14 = b - 12
-2 = b
这是错误的(数学上)因为b是否定的。 所以我们需要把-4换成k
-14 = b + -4 * 4
-14 = b + 16
2 = b
这是正确的答案。在这种情况下,只有标志是差异,但如果你采取-15 mod 4,你将获得java和大多数其他语言-3,但数学上正确的答案将是1(-15 + 16)
使用java,您将获得负值。