当我计算int i = -1 % 2
时,我得到了Java语言中的-1
。在Python语言中,-1 % 2
的结果是1
。我必须做什么才能在Java中获得与模函数相同的行为?
发布于 2011-03-22 07:50:12
如果你需要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))
发布于 2017-01-08 23:05:08
if b > 0:
int mod = (mod = a % b) < 0 ? a + b : a;
不会两次使用%
运算符。
发布于 2011-03-22 08:15:57
如果模数是2的幂,则可以使用位掩码:
int i = -1 & ~-2; // -1 MOD 2 is 1
相比之下,Pascal语言提供了两个运算符;REM接受分子的符号(x REM y
为x - (x DIV y) * y
,而x DIV y
为TRUNC(x / y)
)和MOD需要一个正分母并返回一个正结果。
https://stackoverflow.com/questions/5385024
复制相似问题