Если у меня есть целое число n, и я хочу знать позицию самого значимого бита (то есть, если младший значащий бит справа, я хочу знать позицию самого дальнего левого бита, который является 1), каков самый быстрый/наиболее эффективный метод поиска?
Я знаю, что POSIX поддерживает метод ffs()
в strings.h, чтобы найти первый бит набора, но, похоже, не существует соответствующего метода fls()
.
Есть ли какой-то действительно очевидный способ сделать это, что мне не хватает?
Как насчет случаев, когда вы не можете использовать функции POSIX для переносимости?
Изменить: как насчет решения, которое работает как на 32-битных, так и на 64-битных архитектурах (многие из списков кода выглядят так, как будто они работают только на 32-битных ints).