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

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

от amaya_bahringer , в категории: C/C++ , 10 месяцев назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

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

от vicenta_kertzmann , 9 месяцев назад

@amaya_bahringer 

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

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


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