Оператор &
является битовым оператором. Он сравнивает оба операнда по крупицам. Только если оба бита в позиции установлены, соответствующий бит в результате устанавливается.
Допустим, у вас есть a
и b
, где a
представлен как битовая строка 00001101
и b
как 00001011
. Тогда a & b
записывается как битовая строка 00001001
, потому что
+----- no bit is set
|+---- both bits are set
||+--- only one bit is set
|||+-- only one bit is set
||||+- both bits are set
vvvvv
a = 00001101
b = 00001011
----------------
a & b = 00001001
Другими словами, (states & 0x01) == 0
истинно тогда и только тогда, когда states
является четным, то есть записывается как битовая строка и заканчивается 0
. Помните, что 0x01
- это 00000001
, записанный в виде битовой строки.