У меня есть код, который меняет два набора шестнадцатеричных чисел, а затем сохраняет их в новый символ unsigned. Код выглядит следующим образом:Логика битового маскирования XOR-кода
unsigned char OldSw = 0x1D;
unsigned char NewSw = 0xF0;
unsgined char ChangedSw;
ChangedSw = (OldSw^~NewSw) & ~OldSw;
Так что я знаю:
0x1D = 0001 1101
0xF0 = 1111 0000
Im замешательстве от того, что делает линию changedSw. Я знаю, что это даст выход 0x02, но я не могу понять, как это делается.
Выполняйте операции, один за другим, на бумаге. Сначала сделайте инверсию «NewSw», затем XOR, затем инверсию «OldSw» и, наконец, AND. Тогда вы точно узнаете, что происходит и почему. –
Итак, NewSw станет 0000 1111 после правильной инверсии? Тогда XOR приведет его к 0x0D. Тогда я бы И что с инвертированным oldSw? – user081608
Да, вот что происходит. –