Проверка нечетности через битовые операции

Есть статический метод:

public class Application
{
    public static bool IsOdd(int i)
    {
        return ((i & 1) == 1);
    }
}

Объясните пожалуйста как работает эта строка: return ((i & 1) == 1); Понимаю что она возвращает true или false, & тоже понятно что такое, но как работает код в скобках не пойму.

Спасибо.


Ответы (1 шт):

Автор решения: A K

В скобках используются битовые операции с маской - убирается всё, кроме младшего бита.

Т.е. если в двоичном виде неважно что было на месте "x" (0 или 1) после примерения маски 0000 0001 к числу xxxx xxxy через логическое "и" гарантированно останется только младший (крайний справа) бит в своём исходном виде, остальное обнулится. Останется только 0000 000y.

i = xxxx xxx1      xxxx xxx0
    &&&& &&&&      &&&& &&&&
1 = 0000 0001      0000 0001
    ---- ----      ---- ----
    0000 0001 = 1  0000 0000 = 0

Для сравнения: это как в десятичной системе взять число 321: маска подобрана так, что остаётся только цифра 1 в младшем разряде. И типа этот остаток проверяется на не/чётность.

Почитайте по теме:

→ Ссылка