resto relacionales operadores operacion entera ejemplo condicionales java modulo

java - relacionales - Probando la rareza de un entero con el operador de módulo



operadores relacionales en java (5)

El siguiente fragmento de código no prueba la rareza correctamente:

public static boolean isOdd(int i) { return i % 2 == 1; }

Leí en la web que debería hacerlo de la siguiente manera:

public static boolean isOdd(int i) { return i % 2 != 0; }

¿Por qué es esto?


Deberías usar:

(i & 1) != 0

para evitar problemas de signos.

También tenga en cuenta que usar & garantiza que, por muy estúpido que sea el compilador, nunca intentará usar una división para lograr el % operación.


El primer fragmento funcionaría correctamente si el operador de módulo fuera reemplazado por bitwise y el operador:

public static boolean isOdd(int i) { return (i & 1) == 1; }


Esto tiene que ver con la forma en que funciona el módulo en Java. Si i es negativo, la respuesta también será negativa. Cada entrada negativa devolverá falso.


Podría ser porque (i % 2) != 0 funciona tanto para números positivos como negativos


Porque cuando i es negativo -> (-1) % 2 == -1