在某个位置或更低位置计算设置位的有效方法是什么?

在某个位置或更低位置计算设置位的有效方法是什么?

给定std::bitset<64> bits任意数量的位和位位置X(0-63)

在X位或更低位计数位的最有效方法是什么,如果未设置X位,则返回0

注意:如果设置该位,则返回始终至少为1

蛮力方式很慢:

int countupto(std::bitset<64> bits, int X){
  if (!bits[X]) return 0;
  int total=1;
  for (int i=0; i < X; ++i)
  {
    total+=bits[i];
  }
  return total;}

这个count()方法bitset将为您popcount提供所有位,但bitset不支持范围


呼唤远方
浏览 577回答 3
3回答

牧羊人nacy

我的立即反应是测试指定的位,并立即返回0清楚。如果超过该值,则使用该位(以及不太重要的位)设置位掩码,并and使用原始输入创建位掩码。然后使用count()member函数获取结果中设置的位数。至于创建蒙版:你可以向左移动1个位置,然后减去1。
打开App,查看更多内容
随时随地看视频慕课网APP