Вопрос в / Pivot и >> 2 в C++ Решение для следующего большего числаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Вопрос в / Pivot и >> 2 в C++ Решение для следующего большего числа

Сообщение Anonymous »

Я наткнулся на следующее решение C++ для поиска наименьшего числа, большего n, которое имеет одинаковое количество единиц в двоичном представлении

Код: Выделить всё

int solution(int n) {
int pivot = n & -n;
int before = ((n ^ (n + pivot)) / pivot) >> 2;
return (n + pivot) | before;
}
Однако я не до конца понимаю назначение операций /pivot и >> 2 в коде.
Может ли кто-нибудь объяснить, что это такое? выполняются операции и почему они необходимы в этом алгоритме?
Я понимаю, что делает точка поворота в следующем решении (она используется для изоляции младшего значащего набора битов n), и я также получить цель деления по оси — это настроить перевернутые биты до наименьшего битового значения. Однако меня смущает причина операции >> 2 (сдвиг вправо на 2) в этом коде

Подробнее здесь: https://stackoverflow.com/questions/792 ... her-number
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»