java - resto - operador modulo ejemplos
Mod en Java produce nĂºmeros negativos (5)
El problema aquí es que en Python, el operador% devuelve el módulo y en Java devuelve el resto . Estas funciones dan los mismos valores para los argumentos positivos, pero el módulo siempre arroja resultados positivos para la entrada negativa, mientras que el resto puede dar resultados negativos. Hay más información al respecto en esta pregunta .
Puede encontrar el valor positivo al hacer esto:
int i = (((-1 % 2) + 2) % 2)
o esto:
int i = -1 % 2;
if (i<0) i += 2;
(obviamente -1 o 2 pueden ser lo que quieras que sea el numerador o el denominador)
Esta pregunta ya tiene una respuesta aquí:
Cuando calculo int i = -1 % 2
obtengo -1
en Java. En Python, obtengo 1
como resultado de -1 % 2
. ¿Qué debo hacer para obtener el mismo comportamiento en Java con la función de módulo?
Si el módulo es una potencia de 2, entonces puedes usar una máscara de bits:
int i = -1 & ~-2; // -1 MOD 2 is 1
En comparación, el lenguaje Pascal proporciona dos operadores; REM toma el signo del numerador ( x REM y
es x - (x DIV y) * y
donde x DIV y
es TRUNC(x / y)
) y MOD requiere un denominador positivo y devuelve un resultado positivo.
Si necesitas n % m
entonces:
int i = (n < 0) ? (m - (abs(n) % m) ) %m : (n % m);
explicación matemática:
n = -1 * abs(n)
-> n % m = (-1 * abs(n) ) % m
-> (-1 * (abs(n) % m) ) % m
-> m - (abs(n) % m))
Desde Java 8 puedes usar el método Math.floorMod() :
Math.floorMod(-1, 2); //== 1
Nota: Si el valor de módulo (aquí 2
) es negativo, todos los valores de salida también serán negativos. :)
Fuente: https://.com/a/25830153/2311557
if b > 0:
int mod = (mod = a % b) < 0 ? a + b : a;
No usa el operador %
dos veces.