Я пытаюсь найти самый большой 1 << n
, что удовлетворяет это неравенство (все переменные являются положительными целыми числами):Непосредственно (НЕ итеративна) максимизация (1 << п) при условии (а & ~ ((1 << n) - 1)) > = Ь
a & ~((1 << n) - 1) >= b
Решая это итеративно тривиально (и да, я знаю, что вы можете получить более высокую производительность за счет разделяй и властвуй и тому подобное), но это не мой вопрос.
мне интересно, если есть Кстати, это можно было бы решить напрямую, как через бит-скручивание?
Примечание 1: Предположим, что вы можете выполнить «округление вверх/вниз до ближайшей мощности 2» за одну операцию.
Примечание 2: При необходимости вы можете предположить представление представления двух (но я сомневаюсь, что это помогает).
Какую технику я могу использовать для решения этой проблемы, если есть прямой способ? Если нет, могу ли я как-нибудь сказать?
Я пробовал много вещей, таких как XORing a
и b
, округляя результат до следующей мощности 2 и т. Д., Но я не нашел ничего хорошего, что всегда срабатывает.
«все переменные являются целыми положительными» означает ли вы, что все переменные имеют тип 'unsigned'? – Marian
@Marian: Конечно, почему бы и нет ... вы можете просто отнести их к подписанным или неподписанным, если это не так, на самом деле это не проблема. – Mehrdad
Разве это не эквивалентно поиску ведущего бита 'a & ~ b'? – Marian