表达式的所有可能结果是什么,整数变量(n % m)
在哪里?n
m
我以为是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 之间