Инвертировать бит в позиции с номером n ячейки А, если в ячейке В под номерами m, m+1 стоит последовательность из единиц

Есть такое задание, нужно инвертировать бит в позиции с номером n ячейки А, если в ячейке В под номерами m, m+1 стоит последовательность из единиц в c++.

При этом ячейки A и B - имитация 16 разрядных регистров. Нумерация позиций (разрядов) ячеек с 0 – 15. Желательно в коде использовать команды "unsigned" и "void". Заранее спасибо огромное за помощь!!


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

Автор решения: Zhihar

чтобы определить чему равен n-ый бит некоторого числа value необходимо выполнить

value & (1 << n)

если n-ый бит был равен 0, то значение описанной выше операции будет равно нулю иначе будет ненулевым (будет равно 1 << n ну или 2^n)

чтобы установить n-ый бит (установить бит в 1) необходимо выполнить:

value | (1 << n)

чтобы сбросить n-ый бит (установить бит в 0) необходимо выполнить:

value & (~(1 << n))

этого достаточно для выполнения задачи

→ Ссылка
Автор решения: Mikhailo
if ((B>>m)&0x03==0x03) A ^= 1<<n;
→ Ссылка