Ответ 1
Ответ
Символ &
является побитовым оператором И. Используется с 1, он в основном маскирует значение для извлечения младшего бита или, другими словами, скажет вам, является ли значение четным или нечетным.
Дополнительная информация о Python &
operator
Для получения дополнительной информации см.: http://wiki.python.org/moin/BitwiseOperators
Почему это работает, чтобы проверить Odd vs. Even
EDIT: добавление этого раздела, так как этот ответ получает некоторую любовь
Причина, по которой ANDing значение с 1 указывает, является ли значение нечетным или даже может быть не очевидным вначале.
Бинарное представление числа - это, по сути, сумма серии YES или NO для каждой мощности 2, перемещающейся влево, начиная с самой правой цифры с 1, 2, 4, 8,...
Существует только один способ представить любое число таким образом. Например, число 13 (база 10) может быть записано в двоичном виде как "1101" (или шестнадцатеричное, как 0xD, но это рядом с точкой). Глянь сюда:
1 1 0 1
x x x x
8 4 2 1
= = = =
8 + 4 + 0 + 1 = 13
Обратите внимание, что кроме самой правой двоичной цифры все остальные 1
цифры добавят четное число (т.е. Кратное 2) к сумме. Таким образом, единственный способ получить нечетную конечную сумму - добавить этот нечетный 1 из самой правой цифры. Поэтому, если нам интересно, если число нечетное или четное, мы можем посмотреть его двоичное представление и игнорировать все, кроме самой правой цифры.
Для этого мы используем побитовый оператор И. Значение 1
в двоичном выражении выражается как 1
:
0 0 0 1
x x x x
8 4 2 1
= = = =
0 + 0 + 0 + 1 = 1
Инициализация значения с 1
как это, приведет к 1
если значение самого правого бита установлено, и 0
если это не так.
И поскольку 0
обычно считается "ложным" в большинстве языков, а ненулевые значения считаются "истинными", мы можем просто сказать как ярлык:
if (value & 1): do_something_with_odd_value()...