Подтвердить что ты не робот

Тестирование нечетности целого числа с модульным оператором

Следующий фрагмент кода не проверяет правильность нечетности:

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

Я прочитал в Интернете, что должен сделать это следующим образом:

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

Почему это?

4b9b3361

Ответ 1

Возможно, потому что (i % 2) != 0 работает как для положительных, так и для отрицательных чисел

Ответ 2

Потому что, когда i отрицательный → (-1) % 2 == -1

Ответ 3

Вы должны использовать:

(i & 1) != 0

чтобы избежать проблем с символами.

Также обратите внимание, что использование & гарантирует, что, несмотря на глупость компилятора, он будет никогда пытаться использовать деление для выполнения операции %.

Ответ 4

Первый фрагмент будет работать корректно, если оператор modulo должен быть заменен поразрядным и оператором:

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

Ответ 5

Это связано с тем, как modulo работает на Java. Если я отрицательный, ответ будет отрицательным. Каждый отрицательный вход возвращает false.