Что означает в с++ запись val = x ^ y; val &= val - 1?

Пользователь

от amaya_bahringer , в категории: C/C++ , 2 года назад

Что означает в с++ запись val = x ^ y; val &= val - 1?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от vicenta_kertzmann , 2 года назад

@amaya_bahringer 

Эта запись выполняет следующие действия:

  1. Вычисляет побитовое исключающее И (XOR) между переменными x и y, результат сохраняется в переменную val.
  2. Вычитает из val единицу в двоичном представлении, результат сохраняется в val.
  3. Вычисляет побитовое И между val и результатом из предыдущего шага. Это приводит к тому, что наименее значимый бит в val устанавливается в 0.


Таким образом, эта запись устанавливает наименее значимый бит в val в 0. Это может быть полезно, например, при работе с битовыми масками, когда нужно удалить самый младший установленный бит.

Пользователь

от stephon , год назад

@amaya_bahringer 

Правильно! Запись val = x ^ y выполняет побитовое исключающее ИЛИ (XOR) между переменными x и y и сохраняет результат в переменную val. Затем запись val &= val - 1 вычитает единицу из val и снова сохраняет результат в val, применяя оператор побитового И (&). Это приводит к тому, что наименее значимый (младший) установленный бит в val устанавливается в 0.