Обычный метод нахождения нечетного/четного состоит в том, чтобы взять остаток от числа, и если остаток равен 1, то число нечетное, если остаток равен 0 тогда все в порядке.
Здесь важно отметить наличие ‘1’ в двоичном представлении любого числа, мы знаем, что если нам нужно добавить 1 к любому числу, мы делаем это в младшем значащем бите (самый правый бит), поскольку, добавляя 1 (бит) в конец любого двоичного числа, число будет увеличено на 1. Ничего сложного, верно!
Теперь мы также можем быть уверены, что если младший значащий бит любого числа равен 1, то это число является нечетным числом. Почему? Потому что добавление других битов в двоичный файл представляет собой четное число (2, 4, 8, 16, 32….) поскольку они не что иное, как кратные 2 (21, 22, 23, 2⁴,
Таким образом, проверяя только младший значащий бит двоичного файла, мы можем определить, является ли это число четным или нечетным. Но есть ли какой-нибудь способ извлечь только последний бит числа? нет. Но мы можем найти выход, используя двоичные операции. & (и эксплуатация)
Основное свойство оператора & заключается в том, что он приводит к 1, если оба бита равны 1, иначе это приводит к 0. Пример:
&1000111 --------- 0000101 (only if both the bits are 1 it results 1)
Но как мы можем использовать это свойство в нашей текущей проблеме? Если мы заменим наше число на 1, это приведет к тому, что мы получим значение с наименьшим значащим битом. как?
4 -> 100 1 -> &001 ---- 000 -> 0 (hence even) 5 -> 101 1 -> &001 ---- 001 -> 1 (hence odd)
Таким образом, каждый раз, когда мы сравниваем число с 1, это приводит либо к 0 (в случае четного), либо к 1 (в случае нечетного). Теперь давайте закодируем.
public boolean isEven(int number){ int temp=number&1; if(temp==1) return false; return true; }
Оригинал: “https://dev.to/prateekbud/find-even-odd-with-bits-manipulation-1in9”