相关疑难解决方法(0)

设置的最低有效位的位置

我正在寻找一种有效的方法来确定在整数中设置的最低有效位的位置,例如对于0x0FF0,它将是4.

这是一个简单的实现:

unsigned GetLowestBitPos(unsigned value)
{
   assert(value != 0); // handled separately

   unsigned pos = 0;
   while (!(value & 1))
   {
      value >>= 1;
      ++pos;
   }
   return pos;
}
Run Code Online (Sandbox Code Playgroud)

任何想法如何挤出一些周期?

(注意:这个问题适合喜欢这类事情的人,而不是人们告诉我xyzoptimization是邪恶的.)

[编辑] 感谢大家的想法!我也学到了其他一些东西.凉!

c c++ optimization bit-manipulation

111
推荐指数
10
解决办法
7万
查看次数

log2的幂为2的整数

是否有一种有效的方法来查找数字的log2,假设它是2的幂.我知道明显的方法,如有一张桌子或

for (log2=0;x!=1;x>>=1,log2++);
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更有效/更优雅的方式.

c++ algorithm math logarithm

7
推荐指数
1
解决办法
1969
查看次数

用于计数位的高效按位运算或找到最右侧的位

给定unsigned int,我必须执行以下操作:

  1. 计算设置为1的位数
  2. 找到最左边1位的索引
  3. 找到最右边1位的索引

(该操作不应该是架构依赖).

我已经使用按位移位完成了这个,但我必须迭代几乎所有的位(es.32).例如,计算1:

unsigned int number= ...;
while(number != 0){
    if ((number & 0x01) != 0)
        ++count;
    number >>=1;
}
Run Code Online (Sandbox Code Playgroud)

其他操作类似.

所以我的问题是:有没有更快的方法呢?

c c++ binary bits bit-manipulation

5
推荐指数
3
解决办法
6416
查看次数

标签 统计

c++ ×3

bit-manipulation ×2

c ×2

algorithm ×1

binary ×1

bits ×1

logarithm ×1

math ×1

optimization ×1