0

标题几乎概括了它。

在 gcc 中,您可以使用.Find_first()bitset 上的方法来获取第一个有效位的位置。Visual Studio 中是否有任何等价物?

我知道您可以_BitScanForward64在 Visual Studio 中使用来获取第一个有效位,但我使用大于 64 的位集,并且此方法仅适用于 64 位整数。

我也对 De Bruijn bit twiddling 方法不感兴趣。

4

1 回答 1

1
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.

于 2012-12-06T21:47:16.757 回答