Я наткнулся на некоторый пример кода, который отлично работает для моего приложения, но я не уверен, что на самом деле происходит в операторе IF.
unsigned int steps;
uint16_t selected_steps;
for (int j = 16; j>=0; j--)
{
if (((selected_steps^(1 << step_number))>>j) & 0x1) {
some code...
} else {
other code...
}
Я знаю назначение кода, оно состоит в том, чтобы проверить, равен ли бит в selected_steps [j] XOR step_number 1 или 0. Selected_steps [j] равно 0 или 1. Номер шага принимает значения в диапазоне от 0 до 15.
Но я не понимаю, что на самом деле делается, делая
(1 << step_number)
и что тогда делается,
selected_steps^(1 << step_number)) >> j
Я полагаю, что вышеприведенный оператор выводит 1 или 0, поскольку он проверяет 0x1?