标题几乎概括了它。
在 gcc 中,您可以使用.Find_first()
bitset 上的方法来获取第一个有效位的位置。Visual Studio 中是否有任何等价物?
我知道您可以_BitScanForward64
在 Visual Studio 中使用来获取第一个有效位,但我使用大于 64 的位集,并且此方法仅适用于 64 位整数。
我也对 De Bruijn bit twiddling 方法不感兴趣。
标题几乎概括了它。
在 gcc 中,您可以使用.Find_first()
bitset 上的方法来获取第一个有效位的位置。Visual Studio 中是否有任何等价物?
我知道您可以_BitScanForward64
在 Visual Studio 中使用来获取第一个有效位,但我使用大于 64 的位集,并且此方法仅适用于 64 位整数。
我也对 De Bruijn bit twiddling 方法不感兴趣。
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;
}
No bit twiddling, as requested. Returns N
if the bits are all zeros.
Personally, I would recommend bit twiddling instead.