C++ | Помогите понять побитовые операторы
Есть такой код:
#define TEST (1<<0)
a &= ~TEST
Он равносилен этому?
a = a & (0<<1)
Или как?
Ответы (2 шт):
#define TEST (1<<0)
a &= ~TEST
Разбираем...
a = a & ~TEST
Но: TEST - это просто сдвиг единичного бита на 0 разрядов, или просто 1.
a = a & ~1
т.е.
a = a & 11...1110
Второй же оператор -
a = a & (0<<1)
В нем 0 << 1 - это сдвиг 0 на 1 разряд влево, т.е. просто 0:
a = a & 0
Или просто
a = 0
Побитовые операторы работают с двоичным представлением числа.
Обычное И && это результат конъюнкции двух логических выражений.
Побитовое И & это применение логической операции «поразрядно» к соответствующим битам числа.
Пример. x = 52, y = 21, 52 = 110100, 21 = 10101, 52 & 21 = 20
1 1 0 1 0 0
0 1 0 1 0 1
-----------
0 1 0 1 0 0
Операторы побитового сдвига:
n<<1 эквивалентно умножению на 2. Все биты сдвигаются на 1 позицию влево, крайний левый бит отбрасывается. Крайний правый заменяется на 0.
n>>1 эквивалентно целой части от деления на 2. Все биты сдвигаются на 1 позицию вправо, крайний правый бит отбрасывается. Крайний левый заменяется на 0.
a &= ~TEST
равносильно
a = a & (TEST)
a = a & ~(1<<0)