Учитывая число без знака, каков хороший (желательно быстрый) способ получения количества старших 1-бит?
Мне нужно это для вычисления числа CIDR из четырехточечной маски IPv4.
Примечание: я видел получение-числа-конечных-1-битов , поэтому я могу выполнить поиск на основе таблицы.
Примечание 2. Дажехотя я добавил пару языковых тегов, для меня речь идет об алгоритме, поэтому, если у вас есть хороший на другом языке, пожалуйста, не стесняйтесь писать.
Редактировать: on endian-ness .
Я только что обнаружил, что функция INET_ADDR и IN_ADDR структура хранит адрес IPv4 в формате с прямым порядком байтов, тогда какx86 имеет младший порядок байтов, и большинство процессоров, которые я использую, также имеют младший порядок байтов.
Итак, таблицы поиска для этого конкретного случая достаточно быстрые.
Но спасибо за другие ответы: они очень хорошо работают вболее распространенный случай.
- jeroen