Название в значительной степени суммирует это.
В gcc вы можете использовать .Find_first()
метод для набора битов, чтобы получить позицию первого значащего бита. Есть ли какой-либо эквивалент в Visual Studio?
Я знаю, что вы можете использовать _BitScanForward64
в Visual Studio, чтобы получить первый значащий бит, но я работаю с наборами битов размером больше 64, и этот метод работает только с 64-битными целыми числами.
Я также не заинтересован в методе де Брейна.
template<size_t N>
size_t highbit( bitset<N> const& bs ) {
auto str = bs.template to_string< char, char_traits<char>, allocator<char> >();
size_t retval = 0;
for(auto it = str.begin(); it != str.end(); ++it, ++retval)
{
if (*it == '1')
return retval;
}
return retval;
}
Не так уж и круто, как и просили. Возвращает N
если биты все нули.
Лично я бы порекомендовал немного вертеться.
Других решений пока нет …