Как мне определить, четное или нечетное число? Я давно хотел разобраться в этом и ничего не добился.
131
Вы можете использовать оператор модуля, но это может быть медленным. Если это целое число, вы можете:
if ( (x & 1) == 0 ) { even... } else { odd... }
Это потому, что младший бит всегда будет установлен на нечетное число.
n % 2 == 0
семантически означаетDivide by 2 and check if the remainder is 0
, что гораздо яснее, чем то,n & 1 == 0
что означаетZero all the bits but leave the least significant bit unchanged and check if the result is 0
. Улучшенная ясность первого стоит накладных расходов (возможно, несуществующих). Это то, что я имел в виду под преждевременной оптимизацией. Если что-то идет медленно и вы профилируете это в этой части, переходn % 2
наn & 1
, безусловно, оправдан, но делать это заранее - нет. В общем, работа с битовыми операторами перед профилированием - плохая идея.n % 2 == 0
это чище , чемn & 1 == 0
.источник
Если остаток от деления на 2 равен 0, он четный.
%
оператор для получения остатка.источник
(A % B)
сам по себе может использоваться как выражение, и тогда все становится весело.Оператор остатка% выдаст вам остаток после деления на число.
Так
n % 2 == 0
будет истинно, если n четно, и ложно, если n нечетно.источник
Каждое четное число делится на два, независимо от того, является ли оно десятичным (но десятичное число, если оно присутствует, также должно быть четным). Таким образом, вы можете использовать
%
оператор (по модулю), который делит число слева на число справа и возвращает остаток ...источник
я бы порекомендовал
Вот краткое объяснение того, как проверить, нечетное ли число. Первая попытка похожа на то, что пытался @AseemYadav:
но как было упомянуто в книге:
поэтому обычно, когда у нас есть отрицательное нечетное число, вместо этого
1
мы получаем-1
в результатеi%2
. Итак, мы можем использовать решение @Camilo или просто:но обычно самым быстрым решением является использование оператора И, например @lucasmo, написанного выше:
@Edit Также стоит указать,
Math.floorMod(int x, int y);
что хорошо работает с отрицательным дивидендом, но также может возвращаться,-1
если делитель отрицательныйисточник
Работает для положительных или отрицательных чисел
источник
Наименьший значащий бит (крайний правый) можно использовать для проверки четности или нечетности числа. Для всех нечетных чисел крайний правый бит всегда равен 1 в двоичном представлении.
источник
Эта следующая программа может обрабатывать большие числа (количество цифр больше 20)
Вот результат:
источник
Вы можете использовать оператор модуля, но это может быть медленным. Более эффективным способом было бы проверить младший бит, потому что он определяет, четное или нечетное число. Код будет выглядеть примерно так:
источник
Сделать можно так:
Это потому, что Java в своей операции по модулю имеет знак делимого, левая часть: n. Таким образом, для отрицательных и положительных дивидендов модуль имеет их знак.
Конечно, побитовые операции выполняются быстрее и оптимизированы, просто задокументируйте строку кода двумя или тремя короткими словами для удобства чтения.
источник
Еще один простой способ сделать это без использования условия if / else (работает как для положительных, так и для отрицательных чисел):
Для нечетного числа выражение вернет '1' в качестве остатка, давая
иначе, 'даже' печатается, когда выражение приходит с результатом '0'
источник
int n = -3;
. Как упомянул @Camilo ниже - когда операция с остатком возвращает ненулевой результат, он имеет тот же знак, что и его левый операнд, поэтому, в общем, у нас естьSystem.out.println(messages.get(-1));
то , что дает намjava.lang.ArrayIndexOutOfBoundsException
Если модуль данного числа равен нулю, число является четным, иначе нечетным числом. Ниже приведен способ, позволяющий это сделать:
источник
источник
Вот пример, чтобы определить, является ли данное число четным или нечетным,
Что ж, есть много способов определить то же самое. Обратитесь к этому ресурсу для получения дополнительных примеров, чтобы узнать, является ли данное число четным или нечетным.
источник
Вот полный пример: -
источник