当我计算时,int i = -1 % 2
我会-1
进入 Java。在 Python 中,我得到1
了-1 % 2
. 我必须做什么才能在 Java 中使用模函数获得相同的行为?
问问题
182076 次
5 回答
196
这里的问题是,在 Python 中, % 运算符返回模数,而在 Java 中,它返回余数。这些函数为正参数给出相同的值,但模数总是为负输入返回正结果,而余数可能给出负结果。在这个问题中有更多关于它的信息。
您可以通过执行以下操作找到正值:
int i = (((-1 % 2) + 2) % 2)
或这个:
int i = -1 % 2;
if (i<0) i += 2;
(显然 -1 或 2 可以是您想要的分子或分母)
于 2011-03-21T23:42:30.757 回答
138
于 2015-06-30T13:53:02.370 回答
2
如果你需要n % m
那么:
int i = (n < 0) ? (m - (abs(n) % m) ) %m : (n % m);
数学解释:
n = -1 * abs(n)
-> n % m = (-1 * abs(n) ) % m
-> (-1 * (abs(n) % m) ) % m
-> m - (abs(n) % m))
于 2011-03-21T23:50:11.997 回答
2
if b > 0:
int mod = (mod = a % b) < 0 ? a + b : a;
不使用%
运算符两次。
于 2017-01-08T15:05:07.723 回答
0
如果模数是 2 的幂,那么您可以使用位掩码:
int i = -1 & ~-2; // -1 MOD 2 is 1
相比之下,Pascal 语言提供了两个运算符;REM 采用分子的符号 ( x REM y
is x - (x DIV y) * y
where x DIV y
is TRUNC(x / y)
),而 MOD 需要正分母并返回正结果。
于 2011-03-22T00:15:56.727 回答