表达式的所有可能结果是什么,整数变量(n % m)在哪里?nm
我以为是0,(m-1)但不确定。
假设m是一个正整数,如果可能的值的范围是-min(abs(n), m - 1)through min(abs(n), m - 1),包括在内。
因此,如果n为零或正且大于m(典型情况),则范围将包含0在内m-1。
如果n为零或负数且其绝对值大于m,则范围为-(m-1),0包括 。
在所有情况下,如果n的绝对值低于m,则上面设置的界限由m-1设置n代替。也就是说,如果n为零或正且小于m,则范围为0到n,包括 (等等)。
的结果n % m可以在 ]-m、+m[ 的范围内。
原因:java 中模运算符的定义类似于对于所有 int 值 n 和 m,以下必须始终为真: (n / m) xm + (n % m) == n。
但如果 n 为负数,(n / m) * m则始终等于或大于 n,因此n % m必须为负数才能满足上述等式。
规则是:余数运算的结果(如果非零)始终与左操作数具有相同的符号。
让我们以 positve n 和 m 为例,您的答案是正确的,但这里有一些情况......
-1%10=-1
-1%-10=-1
1%-10=1
1%10=1
正百分比正返回值之间0 to m-1
当 n <= m 时,负 % 负返回值介于 `0 之间,否则它将介于 0 到 n+1 之间