Для целого числа без знака j
операция j&(-j)
очищает все, кроме наименьшего значимого 1 бита, где -j
является отрицательным значением j
, рассматривая j
как целое число со знаком,https://en.wikipedia.org/wiki/Find_first_set
Существует ли аналогичная простая операция, которая очищает все, кроме наиболее значимого 1 бита?
Очевидное решение заключается в использовании clz
(подсчет ведущих нулей)операция, которая присутствует почти во всех современных процессорах.Существует также вопрос Предыдущее значение 2 с ответом, который, как говорят, работает даже быстрее, чем clz
на старых процессорах AMD.См. Также Какой самый быстрый метод для вычисления числа, для которого задан только бит, который является самой значимой цифрой в другом номере?
Мой вопрос заключается в том, существует ли что-то более простое, чем использование clz
которые не могут быть легко доступны на определенных языках.Обратите внимание, что мне нужен сам старший значащий 1 бит, а не его позиция (логарифм).